java线程join的使用
join:api 的解释是等待死亡,很多人都有误解。
他是一个普通方法,作用是 对象调用这个方法就是让本线先执行完毕,再去执行其他线程。
带参的就是先执行参数这么长的时间,再和其他线程抢cpu的时间片。
有时在用到其他线程结果的线程中可以这么用
代码实例:
package xiancheng;
public class JoinDemo {
public static void main(String[] args) {
myThreadJoin mtj = new myThreadJoin(); //创建对象
Thread t = new Thread(mtj); //创建线程
t.start(); //把线程变为就绪状态
/**
* 下面是主线程的输出
*/
for (int i=0;i<20;i++) {
System.out.println(Thread.currentThread().getName()+" --"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 加入 join判断
if (i>10) {
try {
//t.join(); //不带参
t.join(1000); // 带参
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
/**
* 创建一个类,方便启用线程
*/
class myThreadJoin implements Runnable{
@Override
public void run() {
for (int i=0;i<20;i++) {
System.out.println(Thread.currentThread().getName()+" --"+i);
try {
Thread.sleep(500); //睡眠半秒钟
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
没加 join 之前的效果
加入 join 判断之后:
join带参的 结果 :(3比1 的概率)