中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

lock同步鎖如何在Java項目中使用

發布時間:2021-03-22 16:45:46 來源:億速云 閱讀:242 作者:Leah 欄目:編程語言

lock同步鎖如何在Java項目中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

  1)Lock是一個接口,而synchronized是Java中的關鍵字,synchronized是內置的語言實現,synchronized是在JVM層面上實現的,不但可以通過一些監控工具監控synchronized的鎖定,而且在代碼執行時出現異常,JVM會自動釋放鎖定,但是使用Lock則不行,lock是通過代碼實現的,要保證鎖定一定會被釋放,就必須將 unLock()放到finally{} 中;

  2)synchronized在發生異常時,會自動釋放線程占有的鎖,因此不會導致死鎖現象發生;而Lock在發生異常時,如果沒有主動通過unLock()去釋放鎖,則很可能造成死鎖現象,因此使用Lock時需要在finally塊中釋放鎖;

  3)Lock可以讓等待鎖的線程響應中斷,線程可以中斷去干別的事務,而synchronized卻不行,使用synchronized時,等待的線程會一直等待下去,不能夠響應中斷;

  4)通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。

  5)Lock可以提高多個線程進行讀操作的效率。

  在性能上來說,如果競爭資源不激烈,兩者的性能是差不多的,而當競爭資源非常激烈時(即有大量線程同時競爭),此時Lock的性能要遠遠優于synchronized。所以說,在具體使用時要根據適當情況選擇。

package lock;

/*
方式三:
  Lock鎖
synchronized和lock的不同
1.sychronized在執行完相應代碼塊以后屬于自動釋放同步監視器,lock需要手動啟動同步
建議優先使用lock->同步方法塊->同步方法(在方法體之外)

實現Runnable對象被三個線程調用,然后這個對象的run方法里貢獻資源操作器被lock上鎖了

@author zsben
@create 2020-01-03 23:55
*/

import java.util.concurrent.locks.ReentrantLock;

class Window implements Runnable{

  private int ticket = 100;

  //1.實例化lock
  private ReentrantLock lock = new ReentrantLock(true);//fair=true:公平鎖,線程先來后到

  @Override
  public void run() {
    while(true){
      try{
        //2.調用lock方法
        lock.lock();

        if(ticket>0){

          try {
            Thread.sleep(100);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }

          System.out.println(Thread.currentThread().getName()+": "+ticket);
          ticket--;
        }else break;
      }
      finally {
        //3.調用解鎖方法
        lock.unlock();
      }
    }
  }
}

public class LockTest {

  public static void main(String[] args) {
    Window w = new Window();

    Thread t1 = new Thread(w);
    Thread t2 = new Thread(w);
    Thread t3 = new Thread(w);

    t1.start();
    t2.start();
    t3.start();

  }
}

看完上述內容,你們掌握 lock同步鎖如何在Java項目中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舟山市| 伊春市| 顺义区| 鄂尔多斯市| 安仁县| 吴川市| 静安区| 五寨县| 万宁市| 张北县| 十堰市| 循化| 彭州市| 新干县| 彝良县| 金平| 天长市| 华蓥市| 甘德县| 沁源县| 南城县| 罗平县| 合阳县| 富蕴县| 错那县| 乐业县| 冷水江市| 巫溪县| 灵宝市| 新化县| 卓资县| 岫岩| 五指山市| 张家界市| 淮北市| 桃园县| 丹江口市| 泰宁县| 遵义县| 巴林右旗| 宜都市|