Как добраться до метода объекта, который реализует Runnable в Java? - PullRequest
4 голосов
/ 29 марта 2012

У меня есть объект с именем OBJ, который реализует Runnable.Он имеет несколько членов, конструктор, метод run () и метод получения для определенного количества (один из членов).В моем основном методе у меня есть массив потоков, каждый из которых является new OBJ, и каждый из которых в методе run() выполняет определенный расчет и сохраняет его в своем количестве.

ТеперьЯ хотел бы иметь другой цикл (кроме цикла, с которого я начал все свои потоки), и для каждого потока дождаться его завершения, а затем использовать счетчик получателей для суммирования всех подсчетов, которые я получил из потоков.

Как мне добраться до геттера через потоки?

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Лучший способ достичь этого - использовать ExecutorService (см. Java.util.concurrent) с Callables, из которого вы можете получить Futures.

2 голосов
/ 29 марта 2012

Хорошо, создайте свои экземпляры OBJ прежде, чем достигнете цикла потоков:

List<OBJ> objects = new ArrayList<OBJ>();
// Create your objects here
for (int i = 0; i < NUM_OF_OBJ; ++i) {
   objects.add(new OBJ());
}

// Run the threads
List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < NUM_OF_OBJ; ++i) {
   Thread t = new Thread(objects.get(i));
   threads.add(t);
   t.start();
}

// Wait for the threads to finish
for (Thread t : threads) {
    t.join();
}

// Sum all counts
int sum = 0;
for (OBJ object : objects) {
   sum += object.getCount();
}
...