用例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 主線程 -> 許可子線程通行! 子線程 -> 已通行! */ }
全部操作: