1

「メイン」に次のコードを含むクラス「myClass」があります。

 ExecutorService service;  
 List<Future<Integer>> tasks = new ArrayList<Future<Integer>>();  
 service = Executors.newFixedThreadPool(numOfThreads);

次に、各スレッドを開始します。

 for (int i = numOfThreads; i > 0; --i) {   
     tasks.add(service.submit(new StringSearcher(file, offset,threadChankSize, args[1],buffSize)));          
 }  
 for (Future<Integer> task : tasks) {         
    result += task.get();         
 }

クラスには、プログラムの最後 (すべてのスレッドが終了した後) に取得する必要がある "_res" メンバーがあります。そのために、"_res" を返すメソッド "getRes" を作成しましたが、問題はありません。スレッドの終了後にクラスにアクセスできます。「メイン」から各スレッドで作成されたインスタンスへの参照を保持する方法はありますか?

4

1 に答える 1

4

これを行うことができます:

 List<StringSearcher> searchers = new ArrayList<StringSearcher>();

 for (int i = numOfThreads; i > 0; --i) {   
     StringSearcher task = new StringSearcher(file, offset,threadChankSize, args[1],buffSize);
     searchers.add(task);
     tasks.add(service.submit(task));          
 }  
 for (Future<Integer> task : tasks) {         
    result += task.get();         
 }
 for (StringSearcher searcher : searchers){
    /*do stuff with*/ searcher.getRes();
 }
于 2012-04-17T20:46:56.363 に答える