2012-05-01 15 views
0

私はいくつかの非常に大きなtxtファイルを読んで、ユーザの入力に応じて複数のスレッドまたは単一のスレッドを使用しなければなりません。Javaで大きなtxtファイルを読み込むとスレッド化されますか?

私は、ユーザー入力を取得し、ユーザーが単一のスレッドを要求し、そのスレッドの20個のtxtファイルを処理する必要があるという主な方法があります。どうすればこれを達成できますか?以下のコードは自分のコードや設定ではなく、「アイデア」とは何かを示しています。

例:

int numFiles = 20; 
int threads = 1; 

String[] list = new String[20]; 
for(int i = 1; i < 21; i++){ 
    list[i] = "hello" + i + ".txt";//so the list is a hello1.txt, hello2.txt, ..., hello20.txt 
} 

public void run(){ 
//processes txt file 
} 

だから私はシングルスレッドでこれを実現する方法をまとめ、で? 20スレッドありますか?

+0

質問に使用している言語で質問にタグを付けることはできますか(Javaの考えですか?) – assylias

+0

それを指摘してくれてありがとう。 – user1261445

答えて

3

設定可能なスレッドプールが必要で、各ファイル読み取り操作がそのプールに送信されるジョブのようです。

ユーザーが使用するスレッドの数を指定すると、プールを適切に構成し、一連のファイル読み取りジョブを送信し、プールで実行を並べ替えます。

Javaの世界では、Executors.newFixedThreadPoolファクトリメソッドを使用し、各ジョブをCallableとして送信します。 JavaスレッドプールでHere's an article from IBM

+0

例を挙げることはできますか? – user1261445

+0

プロジェクトでは、単一のスレッドまたはテキストファイルの数に等しいスレッドの数でこれを行う必要があることを指定しています。したがって、1つのスレッドで処理する必要がある20個のファイルの場合が該当します。 – user1261445

+0

実際には、ファイルのさまざまな部分を読み取るために複数のスレッドを使用しようとすると、アプリケーションをスローダウンする可能性があります。標準的な磁気ディスクハードウェア(およびOS)は、パラレルではなく順次にファイルを読み込むように最適化されています。ディスクの頭の動きを考える... –

関連する問題