一个unpark,可以抵消过去的一个park或者将来的一个park。
多个unpark,可以抵消过去的多个park。
多个unpark,不可以抵消将来的多个park。
package cn.zh.t1;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.LockSupport;
public class T3 {
private static class Task extends Thread{
private Thread other;
public void run(){
try {
other.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("in one park");
LockSupport.park();
System.out.println("out one park");
}
}
public static void main(String[] args) {
Task t1=new Task();
t1.other=Thread.currentThread();
t1.start();
System.out.println("Main invoke unpark");
LockSupport.unpark(t1);
System.out.println("Main invoke unpark ok");
}
}
main 线程创建并启动t1线程,执行unpark,在t1线程 other.join() 确保main线程执行完毕,才会继续执行main.join()之后的代码,确保main线程的unpark 优先 t1线程的park。输出可以看出 unpark是生效的。
Main invoke unpark
Main invoke unpark ok
in one park
out one park
Process finished with exit code 0