日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

synchronized 与 ReentrantLock

發布時間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 synchronized 与 ReentrantLock 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

synchronized 作用于非靜態方法

public class Sync implements Runnable{private static int count;public Sync() {count = 0;}public synchronized void add() {for (int i = 0; i < 5; i++) {try {System.out.println(Thread.currentThread().getName() + " --- " + (++count));Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}}@Overridepublic void run() {add();} }

test1? :

public void test() {Sync sync1 = new Sync();Sync sync2 = new Sync();Thread t1 = new Thread(sync1);t1.start();Thread t2 = new Thread(sync2);t2.start();try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}

由于兩個線程傳入了兩個不同的 Sync 對象,相當于兩把鎖。運行結果是兩個線程互相切換的;如果傳入的是同一個對象,線程之間不會亂序,因為是同一把鎖,會互斥等待。

以下兩種寫法等價: public synchronized void method( ) {//todo}public void method( ) {synchronized (this){ //todo} }以下兩種寫法也是等價的: public static synchronized void method( ) {//todo}public void method( ) {synchronized (xxx.class){ //todo} }

如果 Sync 類的 add 方法上面加 static 關鍵字,同樣運行test1 的代碼結果不會亂序。因為這時 Sync 類的所有對象共享一把鎖。
總結:

無論synchronized關鍵字加在方法上還是對象上,如果它作用的對象是非靜態的,則它取得的鎖是對象;

如果synchronized作用的對象是一個靜態方法或一個類,則它取得的鎖是對類,該類所有的對象同一把鎖。

如果加的是對象鎖,每個對象只有一個鎖(lock)與之相關聯,誰拿到這個鎖誰就可以運行它所控制的那段代碼

????????除了使用 synchronized 之外, 我們還可以使用 ReentrantLock 來實現同步。 ReentrantLock 與 synchronized 相似,都具備線程重入特性,只是寫法上有點區別。ReentrantLock 需要顯示的聲明出來,并配合(lock( ), unlock( ), try/finally 語句塊來完成)。ReentrantLock 增加了一些高級功能:

  • 等待可以中斷:當持有鎖的線程長期不釋放鎖的時候,正在等待的線程可以選擇放棄等待,改為處理其他邏輯;
  • 公平鎖: 多線程在等待一個鎖的時候,可以實現按照申請鎖的順序依次獲取鎖;
  • 鎖可綁定多個條件: 在 synchronized 中,鎖對象的 wait(), notify(), notifyAll() 方法可以實現一個隱含的條件,如果要實現多條件關聯,就必須額外加鎖。而 ReentrantLock 只需要調用 newCondition() 方法即可;
  • 轉載于:https://my.oschina.net/freedemon/blog/1810155

    總結

    以上是生活随笔為你收集整理的synchronized 与 ReentrantLock的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。