久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      什么是讀寫鎖

      什么是讀寫鎖

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

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

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

      什么是讀寫鎖

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

      代碼示例:

      public class ReadWriteLockDemo {     public static void main(String[] args) {         ReadWriteLock readWriteLock = new ReentrantReadWriteLock();         Book book = new Book();//創(chuàng)建一本書,可讀可寫          //兩個(gè)寫手         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個(gè)讀者         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<String, String> 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;     } }

      輸出結(jié)果:

      "C:Program FilesJavajdk1.8.0_144binjava.exe" "-javaagent:F:MyDirIDEAIDEA2018IntelliJ IDEA 2018.2.4libidea_rt.jar=54141:F:MyDirIDEAIDEA2018IntelliJ IDEA 2018.2.4bin" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_144jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_144jrelibextnashorn.jar;C:Program FilesJavajdk1.8.0_144jrelibrt.jar;E:idea_workplacejavaBasetargetclasses" 寫手0在寫文章 寫手1在寫文章 讀者0在閱讀文章...6b021 讀者1在閱讀文章...220e4 讀者2在閱讀文章...6b021 讀者4在閱讀文章...6b021 讀者3在閱讀文章...220e4 讀者5在閱讀文章...220e4  Process finished with exit code 0

      讀寫鎖的效率

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

      讀寫鎖是否會(huì)提高使用互斥鎖的性能取決于數(shù)據(jù)被讀取的頻率與被修改的頻率,讀取和寫入操作的持續(xù)時(shí)間以及數(shù)據(jù)的爭(zhēng)用 ,嘗試同時(shí)讀取或?qū)懭霐?shù)據(jù)的線程數(shù)。

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

      此外,如果讀取操作太短,則讀寫鎖定實(shí)現(xiàn)(其本身比互斥鎖更復(fù)雜)的開銷可以支配執(zhí)行成本,特別是因?yàn)樵S多讀寫鎖定實(shí)現(xiàn)仍將序列化所有線程通過小部分代碼。 最終,只有剖析和測(cè)量將確定使用讀寫鎖是否適合您的應(yīng)用程序。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)