用例1:子執行緒等待主線程發放許可!
publicstatic
void
main(string args)
};thread.start();
system.out.println("主線程 -> 休眠1秒!");
try
catch
(interruptedexception e)
system.out.println("主線程 -> 發放通行許可於子執行緒!");
locksupport.unpark(thread);
/*執行結果:
主線程 -> 休眠1秒!
子執行緒 -> 測試通行許可!
主線程 -> 發放通行許可於子執行緒!
子執行緒 -> 已通行!
*/}
用例2:主線程提前發放許可給子執行緒!
publicstatic
void
main(string args)
catch
(interruptedexception e)
system.out.println("子執行緒 -> 測試通行許可!");
locksupport.park();
system.out.println("子執行緒 -> 已通行!");}};
thread.start();
system.out.println("主線程 -> 提前發放通行許可於子執行緒!");
locksupport.unpark(thread);
/*執行結果:
主線程 -> 提前發放通行許可於子執行緒!
子執行緒 -> 休眠1秒!
子執行緒 -> 測試通行許可!
子執行緒 -> 已通行!
*/}
用例3:子執行緒傳遞資料給主線程。
publicstatic
void
main(string args)
};thread.start();
system.out.println("主線程 -> 休眠1秒!");
try
catch
(interruptedexception e)
system.out.println("主線程 -> 檢查並處理子執行緒的通行證:" +locksupport.getblocker(thread));
system.out.println("主線程 -> 許可子執行緒通行!");
locksupport.unpark(thread);
/*執行結果:
主線程 -> 休眠1秒!
子執行緒 -> 測試通行許可!並提供通行證:a
主線程 -> 檢查並處理子執行緒的通行證:a
主線程 -> 許可子執行緒通行!
子執行緒 -> 已通行!
*/}
全部操作:
主要用途:
當前執行緒需要喚醒另乙個執行緒,但是只確定它會進入阻塞,但不確定它是否已經進入阻塞,因此不管是否已經進入阻塞,還是準備進入阻塞,都將發放乙個通行准許。
正確用法:
把locksupport視為乙個sleep()來用,只是sleep()是定時喚醒,locksupport既可以定時喚醒,也可以由其它執行緒喚醒。
多執行緒同步
synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...
多執行緒同步
同步 即限制某個資源在同一時間只能被同乙個執行緒訪問。執行緒安全問題 多個執行緒共同處理共享資源所導致的。解決 多執行緒處理乙個共享資源時,將處理共享資源的 利用關鍵字synchronized修飾。同步 塊 synchronized修飾 塊,synchronized lock 同步方法 synchr...
多執行緒同步
子執行緒迴圈10次,接著主線程迴圈100,接著又回到子執行緒迴圈10次,接著再回到主線程又迴圈100,如此迴圈50次,請寫出程式 package com.itcast public class traditionthreadcommuncation start 子執行緒 for int j 1 j ...