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.