java執行緒Lock的wait

2021-06-24 11:51:29 字數 855 閱讀 5445

如果lock在lock.lock();之後進入lock.wait();

那麼所有的獲取lock.lock();的**都會被阻塞。

但是synchronized (lock)  這個**可以被執行,且只有執行喚醒之後才能使得程式繼續走。

看**class r1 implements runnable

} catch (interruptedexception e) finally

system.out.println("over");}}

class r2 implements runnable }}

如果先執行r1在執行r2

就無法結束程式,

如果吧r2的獲取鎖的**注釋掉就可以

但是使用了lock最好使用private static condition canget = lock.newcondition();去等待和喚醒

**如下

public class mylock_1

sleep(2);

thread t2 = new thread[n2];

for (int i = 0; i < n2; i++)

}public static void main(string args)

class r1 implements runnable catch (interruptedexception e)  

finally

system.out.println("over");}}

class r2 implements runnable

}public void sleep(int sec) catch (interruptedexception e) }}

Java多執行緒 Lock

reentrantlock可以和synchronized達到一樣的效果,並且擴充套件功能上也更加強大,而且使用更加靈活。lock lock new reentrantlock 加鎖 lock.lock 取消鎖 lock.unlock 等待通知模式 synchronized與wait 和notify方...

Java 多執行緒之Lock的用法

lock 為執行緒加鎖解鎖,因為多個執行緒在訪問同乙個資源時,乙個資源不能同時給兩個執行緒進行讀寫操作.所以使用執行緒同步的方式來對資源進行訪問限制.下面來看lock的用法 使用流程 1.建立reentrantlock物件,首先,這個reentrantlock類 重入鎖 是一種遞迴無阻塞的同步機制的...

java執行緒wait與sleep的區別

1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...