2012-04-17 1 views
1

У меня есть класс, «MyClass» с этим кодом в «основной»:как сохранить Referance к экземпляру созданного на дочернем потоке

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», который мне нужно получить в конце программы (после завершения всех потоков) Для этого я создал метод «getRes», который возвращает «_res», но проблема в том, что я не знаю У меня есть доступ к классу после его окончания. есть способ сохранить ссылку от «main» до экземпляра, созданного в каждом потоке?

ответ

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(); 
} 
+0

Ровно. Жизненный цикл объекта не имеет ничего общего с потоками. Это все о том, где вы держите ссылки на них. –

Смежные вопросы