Thread.join()之后实际发生了什么?

时间:2016-09-05 10:24:11

标签: java multithreading

我有一个解析大量txt文件的程序,所以我想做一些多线程来同时解析几个文件。我做了什么:为几个文件创建了一些线程(例如:3个文件的3个线程),然后在循环中添加了thread.join()。完成之后,我为另一个文件创建线程,再次再次执行join()...我知道join()等待每个线程完成他的工作,但之后这个线程会发生什么?它是否为另一个人腾出空间,还是它还活着但什么都不做?我希望一次只有这些几个线程存活。我不想要添加新的只是让它们堆叠的情况。

2 个答案:

答案 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)

最好在此图片上了解Thread生命周期 enter image description here

Terminated返回后,您的工作线程将处于join状态(死亡)。

来自join()方法code

public final synchronized void join(long millis) throws InterruptedException {
    ...
    while (isAlive()) {
        wait(0);
    }
    ...
}