LockSupport 提供线程阻塞原语
LockSupport.park();//被挂起,线程不会往下运行
LockSupport.unpark(t1);//释放挂起,继续往下走
能够响应中断,但不抛出异常。
中断响应的结果是,park()函数的返回,继续执行下面的程序,可以从Thread.interrupted()得到中断标志
结束挂起两个方式:
执行LockSupport.unpark(t1); 或者是中断
public class LockSupportTest implements Runnable {
@Override
public void run() {
System.out.println("线程:"+Thread.currentThread().getName()+" do");
LockSupport.park();
System.out.println("ddd");
System.out.println(Thread.interrupted());
}
public static void main(String[] args) {
LockSupportTest test = new LockSupportTest();
Thread t1 = new Thread(test);
t1.start();
// LockSupport.unpark(t1);
t1.interrupt();
}
}
当我们在主方法中把
t1.interrupt();和LockSupport.unpark(t1); 都注释后,线程打印:线程:Thread-0 do将一直等待,此时被挂起。
当我们执行t1.interrupt();时线程继续执行打印:
线程:Thread-0 do
ddd
true
当我们执行LockSupport.unpark(t1)的时候打印:
线程:Thread-0 do
ddd
false