精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

什么是讀寫鎖

我們知道多個線程同時讀一個資源類是沒有任何問題的,所以在并發的情況下,讀取共享資源應該是可以同時進行的;但是,如果一個線程想要去寫共享資源,就不應該再有其他線程同時對該共享資源進行讀或者是寫操作了。

成都創新互聯是一家集網站建設,友好企業網站建設,友好品牌網站建設,網站定制,友好網站建設報價,網絡營銷,網絡優化,友好網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

(推薦教程:java入門教程)

我們想要的是:允許多個線程同時讀,但只要有一個線程在寫,其他線程就必須等待。

讀寫鎖就是這個原理,即讀寫鎖在同一時刻可以允許多個多線程訪問,但是在寫線程訪問的時候,所有的讀線程和其他寫線程都會被阻塞。讀寫鎖實際維護了一對鎖,一個讀鎖,一個寫鎖,通過分離讀鎖和寫鎖,使得其并發性比獨占式鎖(排他鎖)有了很大的提升。

代碼示例:

public class ReadWriteLockDemo {
    public static void main(String[] args) {
        ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
        Book book = new Book();//創建一本書,可讀可寫

        //兩個寫手
        for (int i = 0; i < 2; i++) {
            int num = i;
            new Thread(()->{
                try {
                    readWriteLock.writeLock().lock();
                    System.out.println("寫手"+num+"在寫文章");
                    book.write(String.valueOf(num),UUID.randomUUID().toString().substring(0,5));
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    readWriteLock.writeLock().unlock();
                }
            },String.valueOf(i)).start();
        }

        //6個讀者
        for (int i = 0; i < 6; i++) {
            int num = i;
            new Thread(()->{
                try {
                    readWriteLock.readLock().lock();
                    String word = book.read(String.valueOf(num % 2));
                    System.out.println("讀者"+num+"在閱讀文章..."+word);
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    readWriteLock.readLock().unlock();
                }
            },String.valueOf(i)).start();
        }
    }
}
class Book{
    HashMap map = new HashMap<>();
    public void write(String key,String val){
        map.put(key, val);
    }
    public String read(String key){
        String word = map.get(key);
        return word;
    }
}

輸出結果:

"C:\\Program Files\\Java\\jdk1.8.0_144\\bin\\java.exe" "-javaagent:F:\\MyDir\\IDEA\\IDEA2018\\IntelliJ IDEA 2018.2.4\\lib\\idea_rt.jar=54141:F:\\MyDir\\IDEA\\IDEA2018\\IntelliJ IDEA 2018.2.4\\bin" -Dfile.encoding=UTF-8 -classpath "C:\\Program Files\\Java\\jdk1.8.0_144\\jre\\lib\\charsets.jar;C:\\Program Files\\Java\\jdk1.8.0_144\\jre\\lib\\ext\\nashorn.jar;C:\\Program Files\\Java\\jdk1.8.0_144\\jre\\lib\\rt.jar;E:\\idea_workplace\\javaBase\\target\\classes"
寫手0在寫文章
寫手1在寫文章
讀者0在閱讀文章...6b021
讀者1在閱讀文章...220e4
讀者2在閱讀文章...6b021
讀者4在閱讀文章...6b021
讀者3在閱讀文章...220e4
讀者5在閱讀文章...220e4

Process finished with exit code 0

讀寫鎖的效率

(視頻教程推薦:java視頻教程)

讀寫鎖是否會提高使用互斥鎖的性能取決于數據被讀取的頻率與被修改的頻率,讀取和寫入操作的持續時間以及數據的爭用 ,嘗試同時讀取或寫入數據的線程數。

例如最初填充數據的集合,然后經常被修改的頻繁的搜索(例如某種目錄)是使用讀寫鎖的理想候選。 然而,如果更新變得頻繁,那么數據的大部分時間將被專門鎖定,并且并發性增加很少。

此外,如果讀取操作太短,則讀寫鎖定實現(其本身比互斥鎖更復雜)的開銷可以支配執行成本,特別是因為許多讀寫鎖定實現仍將序列化所有線程通過小部分代碼。 最終,只有剖析和測量將確定使用讀寫鎖是否適合您的應用程序。
文章題目:什么是讀寫鎖
分享鏈接:http://m.jcarcd.cn/article/cjgjso.html

主站蜘蛛池模板: 日韩25区中文字幕 | 三级全黄的视频在线 | 91中文字 | 精品尤物在线 | 国产理伦在线观看 | 国产九九自拍电 | 91九色国产在线 | 日韩午夜不卡 | 成人午夜资源站 | 国产精品系列专区 | 精品一区二区6 | 日韩综合一区 | 91视频操| 日本毛x | 九九在线精品视频 | 三区在线观看 | 日本二码 | 日本三级网址狠狠 | 日韩欧美乱国产日 | 日韩午夜高清免费 | 欧美在线日韩精品 | 国产在线综合网站 | 青青青爽国产 | 国产精品1区2区 | 成人午夜福利免费 | 青青久在线视频 | 片一级二级 | 91精品成人影院 | 日本一卡亚洲精品 | 日本高清免费视 | 91午夜福利在线 | 精品欧美一区二区视 | 区水蜜桃在线观看 | 国内精品在线国内 | 国产极品喷 | 精品国精品国产 | 日本欧美视频在线看 | 日韩a一级| 国产精品太长太粗太 | 日本大片电影 | 国产午夜草莓视 |