今天在使用多线程Join的时候踩了一个坑,就是在某个线程内用自身调用join方法
这是错误的,仔细想想,让自己先执行完自己的内容完然后再执行自己的内容,这不是**吗?哈哈,所以这是错误的写法
应该在线程中用别的线程调用此方法,至于怎么在本线程中调用其他线程,可以用构造方法传参的方式解决
错误写法
@Override
public void run() {
for (int i=0;i<10;i++){
if(i==3){
try {
Thread.currentThread().join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+":"+(i+1));
}
正确写法
@Override
public void run() {
for (int i=0;i<10;i++){
if(i==3){
try {
//主线程停止等待子线程执行完再继续执行
sonThread.join(); //sonThread为子线程
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+":"+(i+1));
}
}
join() :等待该线程终止(就是等着让调用这个方法的线程先做完它自己的事,然后写这个方法的当前线程中再继续做自己的事)
2019/1/15