用例1:子線程等待主線程發放許可!
public static void main(String[] args) {
Thread thread = new Thread(){
public void run(){
System.out.println("子線程 -> 測試通行許可!");
LockSupport.park();
System.out.println("子線程 -> 已通行!");
}
};
thread.start();
System.out.println("主線程 -> 休眠1秒!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主線程 -> 發放通行許可於子線程!");
LockSupport.unpark(thread);
/*
運行結果:
主線程 -> 休眠1秒!
子線程 -> 測試通行許可!
主線程 -> 發放通行許可於子線程!
子線程 -> 已通行!
*/
}
用例2:主線程提前發放許可給子線程!
public static void main(String[] args) {
Thread thread = new Thread(){
public void run(){
System.out.println("子線程 -> 休眠1秒!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子線程 -> 測試通行許可!");
LockSupport.park();
System.out.println("子線程 -> 已通行!");
}
};
thread.start();
System.out.println("主線程 -> 提前發放通行許可於子線程!");
LockSupport.unpark(thread);
/*
運行結果:
主線程 -> 提前發放通行許可於子線程!
子線程 -> 休眠1秒!
子線程 -> 測試通行許可!
子線程 -> 已通行!
*/
}
用例3:子線程傳遞數據給主線程。
public static void main(String[] args) {
Thread thread = new Thread(){
public void run(){
System.out.println("子線程 -> 測試通行許可!並提供通行證:A");
LockSupport.park(new String("A"));
System.out.println("子線程 -> 已通行!");
}
};
thread.start();
System.out.println("主線程 -> 休眠1秒!");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("主線程 -> 檢查並處理子線程的通行證:" + LockSupport.getBlocker(thread));
System.out.println("主線程 -> 許可子線程通行!");
LockSupport.unpark(thread);
/*
運行結果:
主線程 -> 休眠1秒!
子線程 -> 測試通行許可!並提供通行證:A
主線程 -> 檢查並處理子線程的通行證:A
主線程 -> 許可子線程通行!
子線程 -> 已通行!
*/
}
全部操作: