ReentrantLock 精確喚醒執行緒

2021-09-29 12:44:31 字數 1195 閱讀 6251

synchronized和reentrantlock的區別

reentrantlock如何精確喚醒執行緒

設定場景:三個執行緒按順序呼叫,實現執行緒a→b→c依次啟動,其中a列印 1 次,b列印 2 次,c列印 3 次,再如此迴圈 3 次

class shareres

for (int i = 1; i <= 1; i++)

num = 2;

conditionb.signal();

}catch (exception e)finally

}void print2()

for (int i = 1; i <= 2; i++)

num = 3;

conditionc.signal();

}catch (exception e)finally

}void print3()

for (int i = 1; i <= 3; i++)

num = 1;

conditiona.signal();

}catch (exception e)finally

}}public class locktraditiondemo

}},"執行緒a").start();

new thread(new runnable()

}},"執行緒b").start();

new thread(new runnable()

}},"執行緒c").start();

}}----------------------------------

執行緒a 1

執行緒b 1

執行緒b 2

執行緒c 1

執行緒c 2

執行緒c 3

執行緒a 1

執行緒b 1

執行緒b 2

執行緒c 1

執行緒c 2

執行緒c 3

執行緒a 1

執行緒b 1

執行緒b 2

執行緒c 1

執行緒c 2

執行緒c 3

reentrantlock 繫結了三個條件物件,可以精確喚醒執行緒。

ReentrantLock實現同步

reentrantlock 也可以實現synchronized方法 塊的同步效果。reentrantlock 實現同步 如下 1 新建乙個service類 public class myservice public static void methodb 2 新建乙個測試類 public class...

ReentrantLock之unlock方法分析

public void unlock public final boolean release int arg return false release 1 嘗試在當前鎖的鎖定計數 state 值上減1。成功返回true,否則返回false。當然在release 方法中不僅僅只是將state 1這麼...

ReentrantLock 原理分析

public void lock 這是lock的原始碼,呼叫的其實是sync這個物件的lock函式,而sync是reentrantlock內部類sync的乙個物件例項,他有兩種實現nonfairsync 非公平鎖 和fairsync 公平鎖 先看公平鎖的lock函式 final void lock ...