欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java lock同步鎖使用實(shí)例解析

 更新時(shí)間:2020年01月06日 11:47:38   作者:zsben  
這篇文章主要介紹了Java lock同步鎖使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Java lock同步鎖使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

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

  2)synchronized在發(fā)生異常時(shí),會(huì)自動(dòng)釋放線程占有的鎖,因此不會(huì)導(dǎo)致死鎖現(xiàn)象發(fā)生;而Lock在發(fā)生異常時(shí),如果沒有主動(dòng)通過unLock()去釋放鎖,則很可能造成死鎖現(xiàn)象,因此使用Lock時(shí)需要在finally塊中釋放鎖;

  3)Lock可以讓等待鎖的線程響應(yīng)中斷,線程可以中斷去干別的事務(wù),而synchronized卻不行,使用synchronized時(shí),等待的線程會(huì)一直等待下去,不能夠響應(yīng)中斷;

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

  5)Lock可以提高多個(gè)線程進(jìn)行讀操作的效率。

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

package lock;

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

實(shí)現(xiàn)Runnable對象被三個(gè)線程調(diào)用,然后這個(gè)對象的run方法里貢獻(xiàn)資源操作器被lock上鎖了

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

import java.util.concurrent.locks.ReentrantLock;

class Window implements Runnable{

  private int ticket = 100;

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

  @Override
  public void run() {
    while(true){
      try{
        //2.調(diào)用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.調(diào)用解鎖方法
        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();

  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringCloud gateway+zookeeper實(shí)現(xiàn)網(wǎng)關(guān)路由的詳細(xì)搭建

    SpringCloud gateway+zookeeper實(shí)現(xiàn)網(wǎng)關(guān)路由的詳細(xì)搭建

    這篇文章主要介紹了SpringCloud gateway+zookeeper實(shí)現(xiàn)網(wǎng)關(guān)路由,本文通過圖文實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • springboot整合JSR303校驗(yàn)功能實(shí)現(xiàn)代碼

    springboot整合JSR303校驗(yàn)功能實(shí)現(xiàn)代碼

    這篇文章主要介紹了springboot整合JSR303校驗(yàn)功能實(shí)現(xiàn),JSR303校驗(yàn)方法有統(tǒng)一校驗(yàn)的需求,統(tǒng)一校驗(yàn)實(shí)現(xiàn)以及分組校驗(yàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問題

    解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問題

    Minio是Apache?License?v2.0下發(fā)布的對象存儲(chǔ)服務(wù)器,使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負(fù)載的高性能基礎(chǔ)架構(gòu)。這篇文章主要介紹了SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù),需要的朋友可以參考下
    2022-03-03
  • Java之Spring認(rèn)證使用Profile配置運(yùn)行環(huán)境講解

    Java之Spring認(rèn)證使用Profile配置運(yùn)行環(huán)境講解

    這篇文章主要介紹了Java之Spring認(rèn)證使用Profile配置運(yùn)行環(huán)境講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 淺談將JNI庫打包入jar文件

    淺談將JNI庫打包入jar文件

    這篇文章主要介紹了淺談將JNI庫打包入jar文件,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java實(shí)現(xiàn)線程插隊(duì)的示例代碼

    Java實(shí)現(xiàn)線程插隊(duì)的示例代碼

    在編寫多線程的業(yè)務(wù)時(shí),會(huì)遇到讓一個(gè)線程優(yōu)先于其他線程運(yùn)行的情況,除了可以設(shè)置線程的優(yōu)先級(jí)高于其他線程,還有更直接的方式:線程插隊(duì)。本文將用Java實(shí)現(xiàn)線程插隊(duì),需要的可以參考一下
    2022-08-08
  • Elasticsearch 映射參數(shù)詳解 fields

    Elasticsearch 映射參數(shù)詳解 fields

    這篇文章主要介紹了fields Elasticsearch 映射參數(shù)fields,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • spring?cloud之eureka高可用集群和服務(wù)分區(qū)解析

    spring?cloud之eureka高可用集群和服務(wù)分區(qū)解析

    這篇文章主要介紹了spring?cloud之eureka高可用集群和服務(wù)分區(qū)解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring源碼之請求路徑匹配路由方式

    Spring源碼之請求路徑匹配路由方式

    這篇文章主要介紹了Spring源碼之請求路徑匹配路由方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • RequestContextHolder.getRequestAttributes()空指針問題及解決

    RequestContextHolder.getRequestAttributes()空指針問題及解決

    這篇文章主要介紹了RequestContextHolder.getRequestAttributes()空指針問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論