我有一个解析大量txt文件的程序,所以我想做一些多线程来同时解析几个文件。我做了什么:为几个文件创建了一些线程(例如:3个文件的3个线程),然后在循环中添加了thread.join()。完成之后,我为另一个文件创建线程,再次再次执行join()...我知道join()等待每个线程完成他的工作,但之后这个线程会发生什么?它是否为另一个人腾出空间,还是它还活着但什么都不做?我希望一次只有这些几个线程存活。我不想要添加新的只是让它们堆叠的情况。
答案 0 :(得分:2)
当您在join()
的实例上调用Thread
时,当前线程正在等待线程实例的作业完成。
出于您的目的,使用Thread
方法并不是最简单的方法。
请考虑使用ExecutorService
(用于管理具有特定政策的主题):
// You can easily create a service which runs tasks over many threads
ExecutorService service = Executors.newCachedThreadPool();
// Just put your task to run
service.submit( /* Runnable or Callable */ );
// Shutdown the service after (it will wait for current tasks terminaison)
service.shutdown();
如果您需要回电,也可以使用CompletableFuture
:
CompletableFuture.runAsync( /* Runnable */ )
.thenRun( /* Your callback when task is over */ );
答案 1 :(得分:0)
Terminated
返回后,您的工作线程将处于join
状态(死亡)。
来自join()
方法code:
public final synchronized void join(long millis) throws InterruptedException {
...
while (isAlive()) {
wait(0);
}
...
}