1.join()
方法join()的作用是等待线程销毁,方法join具有使线程排队的作用,有些类似同步的运行效果,方法join的作用是使所属的线程对象x正常执行run方法的任务,而使当前线程z进行无限期的阻塞,等待线程x执行完毕后在执行线程后面的代码。join与sychronized关键字的区别:jion在内部使用wait方法进行等待,而sychronized使用的是“对象监视器原理”作为同步。
举个例子
package com.wx.threadlearn2;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
try{
System.out.println("123");
Thread.sleep(5000);
}catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
package com.wx.threadlearn2;
public class Test1 {
public static void main(String[] args)
{
try {
MyThread myThread=new MyThread();
myThread.start();
myThread.join();
System.out.println("等myThread执行完再执行");
}catch (Exception e)
{
e.printStackTrace();
}
}
}
Join与sychronized关键字的区别:jion在内部使用wait方法进行等待,而sychronized使用的是“对象监视器原理”作为同步。
2.使用join方法的注意点
Join过程中,如果当前线程被中断,则当前线程出现异常。比如在A线程中对调用B,然后中断B线程,B抛出异常以后,A仍可以继续执行。
Join(long)中参数是设定等待的时间。使当前线程等待一定的时间
Join(long)与sleep(long)的区别:join(long)的功能是在内部使用wait(long)来实现的,所以它具有释放锁的功能,即当前线程的锁被释放,其他线程就可以调用此线程的同步方法了。比如A线程调用了B线程的同步方法,并且A再调用B的join,A就释放了B的锁。那么此时C线程可以调用B线程的同步方法。
jion方法后面的代码提前执行出现意外: