到目前为止,在我对 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 次运行,并且仅在我不工作的一天中的某些时间)。