我是多线程新手。我知道关于线程的以下事情:
thread_obj.join()
保持线程直到线程结束
thread_obj.join(5000)
将线程保持5秒钟。之后再作为其他线程运行。
我知道join()
和join(millis)
拥有线程一段时间。我的问题是,如果我们在join()
中提供更多的时间,然后在sleep()
中像join(5000)
和sleep(1000)
一样运行,它将保持良好状态并保持线程5秒钟。之后,您可以像其他线程一样运行,但是如果您在join()
中提供的时间较少,则sleep()
和join(500)
之类的sleep(2000)
将保持线程join()
直到结束。 / p>
我有以下我不理解的代码join()
public class THRD3 extends Thread {
public void run() {
for(int i = 1 ; i <= 10 ; i++) {
System.out.println(Thread.currentThread().getName()+" : "+i);
try {
//Thread.sleep(500);
Thread.sleep(2000);
}
catch (InterruptedException e) {e.printStackTrace();}
}
}
public static void main(String[] args) throws InterruptedException {
THRD3 obj = new THRD3();
THRD3 obj1 = new THRD3();
THRD3 obj2 = new THRD3();
obj.start();
obj.setName("Joined Thread 0");
//obj.join(2000);
obj.join(500);
obj1.start();
obj2.start();
}
}
答案 0 :(得分:6)
调用connection.set_default_connection('connection1')
使调用线程等待线程完成执行。这意味着它将在该语句上被“阻止”,直到执行完成后才继续。传递参数使您可以指定超时,这意味着调用线程将等待该线程完成,或者在超时过去后放弃。
在您的代码Thread.join
中,您的主线程什么也不做,请等到obj.join(500)
线程完成,或者直到500毫秒过去,以先到者为准。
答案 1 :(得分:3)
您的基本假设是join()
“将”相关线程“错误地”保留。 Thread#join()
和Thread#join(long millis)
是同步结构,即您可以使用它们来等待线程终止。
来自the documentation of Thread#join()
:
等待该线程死亡。
此方法的调用与该调用的行为完全相同
join(0)
来自the documentation of Thread#join(long millis)
此线程死亡最多等待毫秒。超时为0表示永远等待。