最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java多線程編程中線程鎖與讀寫鎖的使用示例

 更新時間:2016年04月24日 08:53:07   投稿:goldensun  
這篇文章主要介紹了Java多線程編程中線程鎖與讀寫鎖的使用示例,鎖是控制程序多線程并發(fā)的重要手段,需要的朋友可以參考下

線程鎖Lock
Lock  相當(dāng)于 當(dāng)前對象的 Synchronized

import java.util.concurrent.locks.Lock; 
import java.util.concurrent.locks.ReentrantLock; 
/* 
 * Lock lock = new ReentrantLock(); 
 * lock.lock();  lock.unLock(); 
 * 類似于 synchronized,但不能與synchronized 混用 
 */ 
public class LockTest { 
  public static void main(String[] args) { 
    final Outer outer = new LockTest().new Outer(); 
    new Thread(new Runnable() { 
 
      @Override 
      public void run() { 
        // TODO Auto-generated method stub 
        while (true) { 
          outer.out1("zhangxiaoxiao"); 
          outer.out2("lihuoming"); 
        } 
      } 
 
    }).start(); 
    new Thread(new Runnable() { 
 
      @Override 
      public void run() { 
        // TODO Auto-generated method stub 
        while (true) { 
          outer.out1("zhangxiaoxiao"); 
          outer.out2("lihuoming"); 
        } 
      } 
 
    }).start(); 
 
  } 
  class Outer { 
    Lock lock = new ReentrantLock(); 
    void out1(String name) { 
      lock.lock(); 
      int len = name.length(); 
      for (int i = 0; i < len; i++) { 
        System.out.print(name.charAt(i)); 
      } 
      System.out.println(); 
      lock.unlock(); 
    } 
    void out2(String name) { 
      lock.lock(); 
      int len = name.length(); 
      for (int i = 0; i < len; i++) { 
        System.out.print(name.charAt(i)); 
      } 
      System.out.println(); 
      lock.unlock(); 
    } 
  } 
} 


讀寫鎖 ReentrantReadWriteLock

 讀寫鎖:允許多條線程同時讀;不能讀中有寫;不能寫中有讀;不能寫中有寫

import java.util.HashMap; 
import java.util.Map; 
import java.util.concurrent.locks.ReadWriteLock; 
import java.util.concurrent.locks.ReentrantReadWriteLock; 
/* 
 * 問題:設(shè)計一個 緩存機制 的 偽代碼 
 *  從集合中讀取數(shù)據(jù),讀取不到,就寫入,再考慮多線程并發(fā)的情況  
 */ 
public class ReadWriteLockTest2 { 
  private Map<String, Object> data = new HashMap<String, Object>(); 
  private ReadWriteLock lock = new ReentrantReadWriteLock();  
  //讀寫鎖 
  public Object getInstance1(String key, Object obj) { 
    lock.readLock().lock(); 
    Object value = null; 
    try { 
      value = data.get(key); 
      if (value == null) {//一條線程進入這里, 
        lock.readLock().unlock();//讀鎖解了,其他線程就可能也到這了 
        lock.writeLock().lock();//只能有一條線程到這,寫鎖開啟,要寫入數(shù)據(jù)了 
        if (data.get(key) == null) { 
          value = obj;   
            /*先判斷數(shù)據(jù),如果不存在,才寫入,,因為 界時當(dāng)寫鎖解除后,其他 
              線程,再想寫入時, 判斷到數(shù)據(jù)存在 ,就跳過了。就不會發(fā)生同時寫入的情況 
            */    
          data.put(key, value);  
        } 
        lock.writeLock().unlock();//寫完了,解鎖 
        lock.readLock().lock(); 
      } 
    } finally { 
      lock.readLock().unlock(); 
    }   
    return value; 
  } 

相關(guān)文章

  • Spring中的注解之@Override和@Autowired

    Spring中的注解之@Override和@Autowired

    看別人寫的代碼,經(jīng)常會用到 @Override 和 @Autowired 這兩個注解.這邊總結(jié)一下這兩個注解的作用,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java中超高頻常見字符操作合集(建議收藏)

    Java中超高頻常見字符操作合集(建議收藏)

    這篇文章主要為大家詳細介紹了Java中超高頻常見字符操作合集,文中的示例代碼講解詳細,對我們學(xué)習(xí)java有一定的幫助,需要的小伙伴可以參考下
    2023-10-10
  • Nacos?Discovery服務(wù)治理解決方案

    Nacos?Discovery服務(wù)治理解決方案

    DiscoveryClient是專門負責(zé)服務(wù)注冊和發(fā)現(xiàn)的,我們可以通過它獲取到注冊到注冊中心的所有服務(wù),這篇文章主要介紹了Nacos?Discovery服務(wù)治理,需要的朋友可以參考下
    2022-11-11
  • Java實現(xiàn)多個文檔合并

    Java實現(xiàn)多個文檔合并

    這篇文章主要為大家詳細介紹了如何使用?Java?實現(xiàn)一個簡單且通用的文檔合并工具,主要針對文本文件的合并,感興趣的小伙伴可以參考一下
    2025-03-03
  • 淺談Maven環(huán)境隔離應(yīng)用

    淺談Maven環(huán)境隔離應(yīng)用

    這篇文章主要介紹了淺談Maven環(huán)境隔離應(yīng)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Linux安裝JDK兩種方式詳細教程(附圖)

    Linux安裝JDK兩種方式詳細教程(附圖)

    這篇文章主要給大家介紹了關(guān)于Linux安裝JDK兩種方式詳細教程的相關(guān)資料,Linux的使用相信大家都要用到j(luò)ava吧,在使用java前我們得先安裝jdk以及配置環(huán)境變量等工作,需要的朋友可以參考下
    2023-11-11
  • Java Web開發(fā)入門書籍實例解析(總結(jié)一)

    Java Web開發(fā)入門書籍實例解析(總結(jié)一)

    從事Java Web開發(fā)這一段時間來,對Java 面向?qū)ο蟮乃枷牒蚆VC開發(fā)模式可以說已經(jīng)熟悉了。我當(dāng)前參與的項目使用的框架是Spring、SpringMVC、Hibernate。下面腳本之家小編給大家整理一篇教程幫助大家學(xué)習(xí)javaweb相關(guān)知識,感興趣的朋友可以參考下
    2016-03-03
  • MyBatis的collection和association的使用解讀

    MyBatis的collection和association的使用解讀

    這篇文章主要介紹了MyBatis的collection和association的使用解讀
    2023-12-12
  • Mybatis中#{}與${}的區(qū)別詳解

    Mybatis中#{}與${}的區(qū)別詳解

    這篇文章主要介紹了Mybatis中#{}與${}的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java使用MulticastSocket實現(xiàn)組播

    java使用MulticastSocket實現(xiàn)組播

    這篇文章主要為大家詳細介紹了java使用MulticastSocket實現(xiàn)組播,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評論

临沧市| 墨竹工卡县| 金平| 杭州市| 凌海市| 敦煌市| 阿拉尔市| 江北区| 延津县| 江城| 阿克苏市| 敖汉旗| 驻马店市| 岐山县| 杭锦旗| 婺源县| 体育| 安远县| 永州市| 阳春市| 元阳县| 临城县| 望都县| 临潭县| 四平市| 文安县| 高雄县| 苗栗市| 阿拉善右旗| 怀宁县| 丹江口市| 孝感市| 龙岩市| 南京市| 包头市| 基隆市| 桐梓县| 砀山县| 宁陵县| 西盟| 广州市|