Мой вопрос: Как выполнить кучу поточных объектов на ThreadPoolExecutor
и дождаться их завершения до перехода
Я новичок в ThreadPoolExecutor. Таким образом, этот код является испытанием, чтобы узнать, как он работает. Прямо сейчас я даже не заполняю BlockingQueue
объектами, потому что я не понимаю, как запустить очередь, не вызывая execute()
с другим RunnableObject
. Во всяком случае, прямо сейчас я просто звоню awaitTermination()
, но я думаю, что я все еще что-то пропустил. Любые советы были бы замечательными! Спасибо.
public void testThreadPoolExecutor() throws InterruptedException {
int limit = 20;
BlockingQueue q = new ArrayBlockingQueue(limit);
ThreadPoolExecutor ex = new ThreadPoolExecutor(limit, limit, 20, TimeUnit.SECONDS, q);
for (int i = 0; i < limit; i++) {
ex.execute(new RunnableObject(i + 1));
}
ex.awaitTermination(2, TimeUnit.SECONDS);
System.out.println("finished");
}
Класс RunnableObject:
package playground;
public class RunnableObject implements Runnable {
private final int id;
public RunnableObject(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("ID: " + id + " started");
try {
Thread.sleep(2354);
} catch (InterruptedException ignore) {
}
System.out.println("ID: " + id + " ended");
}
}