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.