多執行緒同步工具 LockSupport

2022-04-29 07:54:08 字數 1652 閱讀 3051

用例1:子執行緒等待主線程發放許可!

public

static

void

main(string args)

};thread.start();

system.out.println("主線程 -> 休眠1秒!");

try

catch

(interruptedexception e)

system.out.println("主線程 -> 發放通行許可於子執行緒!");

locksupport.unpark(thread);

/*執行結果:

主線程 -> 休眠1秒!

子執行緒 -> 測試通行許可!

主線程 -> 發放通行許可於子執行緒!

子執行緒 -> 已通行!

*/}

用例2:主線程提前發放許可給子執行緒!

public

static

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:子執行緒傳遞資料給主線程。

public

static

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 ...