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

Java多線程編程中線程鎖與讀寫(xiě)鎖的使用示例

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

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

import java.util.concurrent.locks.Lock; 
import java.util.concurrent.locks.ReentrantLock; 
/* 
 * Lock lock = new ReentrantLock(); 
 * lock.lock();  lock.unLock(); 
 * 類(lèi)似于 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(); 
    } 
  } 
} 


讀寫(xiě)鎖 ReentrantReadWriteLock

 讀寫(xiě)鎖:允許多條線程同時(shí)讀;不能讀中有寫(xiě);不能寫(xiě)中有讀;不能寫(xiě)中有寫(xiě)

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

相關(guān)文章

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

    Spring中的注解之@Override和@Autowired

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

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

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

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

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

    Java實(shí)現(xiàn)多個(gè)文檔合并

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

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

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

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

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

    Java Web開(kāi)發(fā)入門(mén)書(shū)籍實(shí)例解析(總結(jié)一)

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

    MyBatis的collection和association的使用解讀

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

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

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

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

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

最新評(píng)論

平江县| 鸡东县| 弥勒县| 桂东县| 绵竹市| 梁河县| 石棉县| 衡东县| 衡东县| 娱乐| 宜州市| 襄城县| 斗六市| 齐齐哈尔市| 新源县| 余江县| 娄底市| 香格里拉县| 安义县| 仁寿县| 黄龙县| 大荔县| 博乐市| 邯郸市| 达尔| 富川| 长寿区| 肥城市| 通州市| 闵行区| 密云县| 新邵县| 兴城市| 江川县| 唐河县| 延庆县| 襄城县| 永仁县| 阿城市| 石城县| 自贡市|