国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JUC并發(fā)編程學(xué)習(xí)筆記(八)讀寫鎖

這篇具有很好參考價(jià)值的文章主要介紹了JUC并發(fā)編程學(xué)習(xí)筆記(八)讀寫鎖。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

讀寫鎖

ReadWriteLock

ReadWriteLock只存在一個(gè)實(shí)現(xiàn)類那就是ReentrantReadWriteLock,他可以對(duì)鎖實(shí)現(xiàn)更加細(xì)?;目刂?/p>

讀的時(shí)候可以有多個(gè)閱讀器線程同時(shí)參與,寫的時(shí)候只希望寫入線程是獨(dú)占的

JUC并發(fā)編程學(xué)習(xí)筆記(八)讀寫鎖

Demo:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741792.html

package org.example.rw;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

public class ReadWriteLockDemo {
    /*
    * 讀讀 - 可以共存 (共享鎖)
    * 讀寫 - 不能共存 (獨(dú)占鎖)
    * 寫寫 - 不能共存 (獨(dú)占鎖)
    * */

    public static void main(String[] args) {



        MyCache myCache = new MyCache();
//        寫入:要求在寫入時(shí)不能存在插隊(duì)的情況,以防止寫入時(shí)資源被搶占
        for (int i = 1; i <= 5; i++) {
            final int temp = i;
            new Thread(()->{
                myCache.put(""+temp,temp);
            },String.valueOf(i)).start();
        }
//        讀?。嚎梢圆尻?duì)搶占資源以實(shí)現(xiàn)資源的最大化利用
        for (int i = 1; i <= 5; i++) {
            final int temp = i;
            new Thread(()->{
                myCache.get(temp+"");
            },String.valueOf(i)).start();
        }
    }
}
class MyCache{
    private volatile Map<String,Object> cache = new HashMap<>();
    ReadWriteLock rwLock = new ReentrantReadWriteLock();
//    細(xì)?;刂疲簩?- 只希望同一時(shí)間只有一條線程寫入,寫入完成后再進(jìn)入下一位
    public void put(String key,Object value){
        rwLock.writeLock().lock();
        try {

            System.out.println(Thread.currentThread().getName()+":"+key+"開始寫入");
            cache.put(key,value);
            System.out.println(Thread.currentThread().getName()+":"+key+"寫入完成");
        }catch (Exception e){
            e.printStackTrace();
        }finally {

            rwLock.writeLock().unlock();

        }

    }
//    細(xì)?;刂疲鹤x - 所有人都可以讀
    public Object get(String key){
        rwLock.readLock().lock();

        Object o = null;
        try {
            System.out.println(Thread.currentThread().getName()+":"+key+"開始讀取");
            o = cache.get(key);

            System.out.println(Thread.currentThread().getName()+":"+key+"讀取完成");
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            rwLock.readLock().unlock();

        }

        return o;
    }
}

到了這里,關(guān)于JUC并發(fā)編程學(xué)習(xí)筆記(八)讀寫鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • JUC并發(fā)編程學(xué)習(xí)筆記(九)阻塞隊(duì)列

    JUC并發(fā)編程學(xué)習(xí)筆記(九)阻塞隊(duì)列

    阻塞 隊(duì)列 隊(duì)列的特性:FIFO(fist inpupt fist output)先進(jìn)先出 不得不阻塞的情況 什么情況下會(huì)使用阻塞隊(duì)列:多線程并發(fā)處理、線程池 學(xué)會(huì)使用隊(duì)列 添加、移除 四組API 方式 拋出異常 不拋出異常,有返回值 阻塞等待 超時(shí)等待 添加 add offer put offer(E e, long timeout, TimeUnit unit) 移

    2024年02月06日
    瀏覽(25)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十九)原子引用

    帶版本號(hào)的原子操作! 解決ABA問(wèn)題,引入原子引用(樂(lè)觀鎖思想) AtomicStampedReference類解決ABA問(wèn)題 所有相同類型的包裝類對(duì)象之間值的比較全部使用equals方法比較 Integer使用了對(duì)象緩存機(jī)制,默認(rèn)范圍是-128至127,推薦使用靜態(tài)工廠方法valueOf獲取對(duì)象實(shí)例,而不是new,因?yàn)関

    2024年02月05日
    瀏覽(22)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十)線程池(重點(diǎn))

    JUC并發(fā)編程學(xué)習(xí)筆記(十)線程池(重點(diǎn))

    線程池:三大方法、七大參數(shù)、四種拒絕策略 池化技術(shù) 程序的運(yùn)行,本質(zhì):占用系統(tǒng)的資源!優(yōu)化資源的使用!- 池化技術(shù)(線程池、連接池、對(duì)象池......);創(chuàng)建和銷毀十分消耗資源 池化技術(shù):事先準(zhǔn)備好一些資源,有人要用就拿,拿完用完還給我。 線程池的好處: 1、

    2024年02月06日
    瀏覽(30)
  • JUC并發(fā)編程學(xué)習(xí)筆記(六)Callable(簡(jiǎn)單)

    JUC并發(fā)編程學(xué)習(xí)筆記(六)Callable(簡(jiǎn)單)

    callable接口和runnable接口類似,都是為了執(zhí)行另外一條線程而設(shè)計(jì)的,區(qū)別是Runnable不會(huì)返回結(jié)果也不會(huì)拋出異常。 1、可以有返回值 2、可以拋出異常 3、方法不同;run()/call(); Runnable 實(shí)現(xiàn)Runnable接口,重寫run方法,無(wú)返回值 Callable 實(shí)現(xiàn)Callable接口,重寫call方法,有返回值,可

    2024年02月06日
    瀏覽(24)
  • JUC并發(fā)編程學(xué)習(xí)筆記(四)8鎖現(xiàn)象

    八鎖-就是關(guān)于鎖的八個(gè)問(wèn)題 鎖是什么,如何判斷鎖的是誰(shuí) 對(duì)象、class模板 深刻理解鎖 鎖的東西無(wú)外乎就兩樣:1、同步方法的調(diào)用者,2、Class模板。 同一個(gè)鎖中,只有當(dāng)前線程資源釋放后才會(huì)被下一個(gè)線程所接手。 同步方法的調(diào)用者是兩個(gè)不同的實(shí)例時(shí),互不相關(guān)。 靜態(tài)

    2024年02月06日
    瀏覽(26)
  • JUC并發(fā)編程學(xué)習(xí)筆記(一)認(rèn)知進(jìn)程和線程

    進(jìn)程 一個(gè)程序,如QQ.exe,是程序的集合 一個(gè)進(jìn)程往往可以包含多個(gè)線程,至少包含一個(gè) java默認(rèn)有兩個(gè)線程,GC垃圾回收線程和Main線程 線程:一個(gè)進(jìn)程中的各個(gè)功能 java無(wú)法真正的開啟線程,因?yàn)閖ava是運(yùn)行在虛擬機(jī)上的,所以只能通過(guò)C++,通過(guò)native本地方法調(diào)用C++開啟線程

    2024年02月06日
    瀏覽(95)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十八)深入理解CAS

    JUC并發(fā)編程學(xué)習(xí)筆記(十八)深入理解CAS

    什么是CAS 為什么要學(xué)CAS:大廠你必須深入研究底層!有所突破! java層面的cas-------compareAndSet compareAndSet(int expectedValue, int newValue) 期望并更新,達(dá)到期望值就更新、否則就不更新! Unsafe類 java不能直接操作內(nèi)存,但是可以調(diào)用c++,c++可以操作內(nèi)存,java可以通過(guò)native定義

    2024年02月05日
    瀏覽(28)
  • JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

    JUC并發(fā)編程學(xué)習(xí)筆記(七)常用的輔助類

    CountDownLatch 這是一個(gè)JUC計(jì)數(shù)器輔助類,計(jì)數(shù)器有加有減,這是減。 使用方法 使用前 可能會(huì)在所有人沒(méi)出去之前關(guān)門 使用后 不在乎誰(shuí)先出去,但是一定要總數(shù)等于0后才會(huì)關(guān)門 原理 countDownLatch.countDown();//總數(shù)減1 countDownLatch.await();//等待總數(shù)變?yōu)?才會(huì)往下執(zhí)行,相當(dāng)于阻塞當(dāng)

    2024年02月06日
    瀏覽(22)
  • JUC并發(fā)編程學(xué)習(xí)筆記(二)Lock鎖(重點(diǎn))

    JUC并發(fā)編程學(xué)習(xí)筆記(二)Lock鎖(重點(diǎn))

    傳統(tǒng)的synchronized 傳統(tǒng)的解決多線程并發(fā)導(dǎo)致的一些問(wèn)題我們會(huì)使用synchronized來(lái)解決,synchronized的本質(zhì)就是隊(duì)列、鎖。 Lock的實(shí)現(xiàn)類有:可重復(fù)鎖(最常用)、讀鎖、寫鎖 在創(chuàng)建可重復(fù)鎖時(shí),可傳入boolean類型值來(lái)決定該鎖是公平鎖(先來(lái)后到)還是非公平鎖(可插隊(duì))

    2024年02月06日
    瀏覽(22)
  • JUC并發(fā)編程學(xué)習(xí)筆記(十二)Stream流式計(jì)算

    JUC并發(fā)編程學(xué)習(xí)筆記(十二)Stream流式計(jì)算

    什么是Stream流式計(jì)算 大數(shù)據(jù):存儲(chǔ)+計(jì)算 集合、MySql這些的本質(zhì)都是存儲(chǔ)東西的; 計(jì)算都應(yīng)該交給流來(lái)操作! 一個(gè)案例說(shuō)明:函數(shù)式接口、lambda表達(dá)式、鏈?zhǔn)骄幊?、Stream流式計(jì)算

    2024年02月05日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包