首页 > 代码库 > 07_控制线程_join_线程插队
07_控制线程_join_线程插队
【join线程简述】
join()方法:Thread提供的让一个线程去等待另一个线程完成。当在某个程序执行流中(如main线程)调用其它线程(如t2线程)的join方法(t2.join()),调用线程(main线程)将被阻塞,直到被join()方法加入的join线程(t2.start())执行完成为止。
【示例代码】
package com.Higgin.part02;class JoinThread implements Runnable{ //重写run方法,定义线程执行体 public void run(){ for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"===="+i); } }}public class Demo01 { public static void main(String[] args) throws InterruptedException { JoinThread jt=new JoinThread(); Thread t1=new Thread(jt,"Higgin"); Thread t2=new Thread(jt,"被join的线程"); t1.start(); //启动t1线程 //下面属于main主线程 for(int i=0;i<100;i++){ if(i==20){ t2.start(); //启动t2线程 //main线程调用了t2线程的join方法,导致main线程必须等待t2执行结束才可以向下执行 t2.join(); } System.out.println(Thread.currentThread().getName()+"===="+i); } }}
【运行结果】
一开始,main线程启动了名为"Higgin"的t1线程,此时总共两个线程并发执行,分别是main主线程和Higgin线程,
后来在main主线程中的for循环中,当i==20时候,又启动了t2线程,并且调用了t2线程的join的方法,直接导致main线程阻塞。
因为main线程已经阻塞,所以接下来是"Higgin"和"被join的线程"两者抢占运行,如果"被join的线程"运行结束,main线程进入就绪状态,然后抢占运行,如Higgin线程没结束的话。
【补充】
join()方法有三种重载形式;
1. join() :即等待被join()的线程执行完成
2. join(long millis):等待被join()的线程的最长时间为millis毫秒,如果时间到了,被join的线程仍未执行结束,那么就不等了。
3. join(long millis,int nanos):增加了一个纳秒,等待被join()的线程的最长时间为millis毫秒和nanos纳秒(很少用,一般精确到毫秒就行)
07_控制线程_join_线程插队
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。