で使用しようとしてExecutorService
いBlockingQueue<Runnable>
ますが、スクリプトを終了するときに問題が発生します。問題なく終了しますが、何がわからないので待ち続けます。
まず第一に私はクラスを持っています
public class GenericTask implements Runnable {
public void run() {
// do stuff
}
}
次に、これはコードです
BlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(10000, true);
ExecutorService myExecutor = Executors.newFixedThreadPool(numThreads);
new Thread(new Runnable() {
public void run() {
for (; ; ) {
try {
myExecutor.execute(queue.take());
} catch (InterruptedException ignored) {
}
}
}
}).start();
while (...) {
queue.put(new GenericTask());
}
int waitTime = 500;
myExecutor.shutdown();
try {
while (!myExecutor.awaitTermination(waitTime, TimeUnit.MILLISECONDS)) {
logger.info("Waiting...");
Thread.sleep(waitTime);
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Finished!");
「Finished!」と表示されると、実際に完成していますが、を追加しない限りスクリプトは続行されますが、System.exit(0)
これは正しくないと思います。