【发布时间】:2012-10-18 13:30:05
【问题描述】:
到目前为止,在我对 executorservice 的实验中,我有很多建议涉及使用future.get,然后是future.cancel,以便抛出一个线程中断,然后需要在线程中捕获并处理该中断那里。我的问题有点不同。
假设我正在运行一个线程,它只是跟踪事物运行了多长时间以及它们是否超过了某个阈值,这是否是杀死 executorservice 和所有正在运行的线程的好方法?
示例思考过程:
ExecutorService threadPool = Executors.newFixedThreadPool(12);
timekeeper.start();
List<Future<?>> taskList = new ArrayList<Future<?>>();
for (int i = 0; i < objectArray.length; i++) {
Future<?> task = threadPool.submit(new ThreadHandler(objectArray[i], i));
taskList.add(task);
Thread.sleep(500);
}
if(timekeeper.now() > 60)
threadpool.shutdownNow();
}
这行得通吗?我无法检查,因为我的线程极少发生故障(大约 1/700 次运行,并且仅在我不工作的一天中的特定时间)。
【问题讨论】:
-
我知道的最有效的杀死方法是 .stop() 方法,已弃用但它仍然有效
标签: java multithreading interrupt executor