Java线程连接示例
时间:2020-02-23 14:35:16 来源:igfitidea点击:
在本教程中,我们将看到Java线程join方法。
线程类 join()方法可用于停止电流执行线程,直到线程连接,完成其任务。
所以基本上,它等待加入方法被调用的线程,以便死。
例如:当你调用的时候 t1.join(),主线程将等待T1完成其在恢复执行之前完成其启动。
//Main thread execution
Thread t1=new Thread(mr,"Thread 1");t1.start();
//lets waits for t1 to die
try {
t1.join();
} catch (InterruptedException e) {
join方法的变体
有三种join方法变体
public final void join() throws InterruptedException
在其上调用联接方法的线程将终止。
public final void join(long millis) throws InterruptedException
此方法在线程上调用时,它会等待以下任一:
- 将加入方法被调用的线程,以死。
- 指定毫秒
public final void join(long millis,int nanos) throws InterruptedException
此方法在线程上调用时,它会等待以下任一:
- 将加入方法被调用的线程,以死。
- 指定毫秒+纳米秒
如果调用join方法的线程已经终止或者尚未启动,那么join方法将立即返回。
Java线程连接示例
让我们拍一个简单的例子:
package org.igi.theitroad;
public class MyRunnable implements Runnable {
public void run() {
try {
System.out.println(Thread.currentThread().getName() + " Start");
//thread sleeps for 4 secs
Thread.sleep(4000);
System.out.println(Thread.currentThread().getName() + " end");
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
创造 ThreadExampleMain.java
package org.igi.theitroad;
public class ThreadExampleMain {
public static void main(String args[]) {
System.out.println("Main thread execution starts");
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr, "Thread 1");
Thread t2 = new Thread(mr, "Thread 2");
Thread t3 = new Thread(mr, "Thread 3");
t1.start();
//lets waits for t1 to die
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
try {
//lets waits for 1 sec or t2 to die which ever occurs first
t2.join(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
t3.start();
//complete all threads before completing main thread
try {
t2.join();
t3.join();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("Main thread execution ends");
}
}
运行上面的程序时,我们将获得遵循输出。
Main thread execution starts Thread 1 Start Thread 1 end Thread 2 Start Thread 3 Start Thread 2 end Thread 3 end Main thread execution ends
让我们现在分析输出。
- 主线程执行开始。
Thread 1开始(线程1开始),我们放置t1.join(),它会等待t1死(线程1结束)。Thread 2开始(线程2开始)并等待1秒或者死亡,但随着我们在运行方法中睡眠4秒,它不会在1秒内死亡。所以主线程恢复和Thread 3开始(线程3开始)- 我们放了
t2.join()和t3.join()。这2个线程将在退出主线程之前完成,因此线程2将结束(线程2结束),然后线程3将结束(线程3 结束)。 - 主线程执行结束。
Java线程连接和同步
Java线程连接方法保证在关系之前发生。
它意味着线程 t1调用 t2.join(),T2所做的所有更改都可以看出到T1.

