JUC學習小結(一)

各位小夥伴看本博客之前,可以根據自身情況複習一下多線程,這是我自己總結的筆記https://blog.csdn.net/ls_wifi/article/details/106849602

JUC(java.util.concurrent):三個包

   java.util.concurrent

java.util.concurrent.atomic

java.util.concurrent.locks

如何編寫 企業級的多線程代碼

1.在高內聚低耦合的前提下,線程   操作  資源類

   1.1  先創建一個資源類(高內聚就是資源類自身攜帶這些方法而不是外部提供,低耦合就是減少方法之間的調用)

  NEW RUNNABLE BLOCKED WAITING(死等,不見不散) TIME_WAITING(等到多少秒後你不理我我就撤,過時不候) TERMINATED

  lambda表達式寫法: 拷貝小括號,寫死右箭頭,落地大括號

                                  @FunctionalInterface (函數式接口顯式定義)

                                  Jdk8及以後,允許我們在接口中定義static方法和default方法(均爲方法體)

  Java8 new一個ArrayList底層是new了一個初始值爲10的Object類型的數組  16是HashMap

             ArrayList的擴容是原值的一ban各位小夥伴看本博客之前,可以根據自身情況複習一下多線程,這是我自己總結的筆記https://blog.csdn.net/ls_wifi/article/details/106849602

 

JUC(java.util.concurrent):三個包

 

   java.util.concurrent

 

java.util.concurrent.atomic

 

java.util.concurrent.locks

 

如何編寫 企業級的多線程代碼

 

1.在高內聚低耦合的前提下,線程 操作 資源類

2.判斷/幹活/通知

3. 防止虛假喚醒(判斷用while)

中斷和虛假喚醒是可能產生的,所以要用loop循環,if只判斷一次,while是隻要喚醒就要拉回來再判斷一次。if換成while

   

1.1 先創建一個資源類(高內聚就是資源類自身攜帶這些方法而不是外部提供,低耦合就是減少方法之間的調用)

 

  NEW RUNNABLE BLOCKED WAITING(死等,不見不散) TIME_WAITING(等到多少秒後你不理我我就撤,過時不候) TERMINATED

 

  lambda表達式寫法: 拷貝小括號,寫死右箭頭,落地大括號

 

                                  @FunctionalInterface (函數式接口顯式定義)

 

                                  Jdk8及以後,允許我們在接口中定義static方法和default方法(均爲方法體)

 

  Java8 new一個ArrayList底層是new了一個初始值爲10的Object類型的數組 16是HashMap

             ArrayList的擴容是原值的一半,HashMap的擴容是原值的一倍

  java.util.ConcurrentModificationException  併發修改異常

  解決方法: 1.new Vector<>()

                  2.Collections.synchronizedList(new ArrayList<>())

                  3.new CopyOnWriteArrayList()  //CopyOnWriteArraySet<>()  ConcurrentHashMap<K,V>()

  Collection是接口  Collections是集合接口的工具類

  CopyOnWrite容器即寫時複製的容器。往一個容器添加元素的時候,不直接往當前容器Object[]添加,而是先將Object[]進行copy,複製出一個新的容器Object[]  newElements,然後新的容器Object[]  newElement裏添加元素,添加完元素之後,再將原容器的引用指向新的容器  setArray(newElements); 這樣做的好處是可以對CopyOnWrite容器進行併發的讀,而不需要加鎖,因爲當前容器不會添加任何元素,所以CopyOnWrite容器也是一種讀寫分離的思想,讀和寫不同的容器

TimeUnit.SECONDS.sleep(4); 相當於Thread.sleep(4000)

八鎖理論解釋:(一二鎖)一個對象裏面如果有多個synchronized方法,某一時刻內,只要一個線程去調用其中的一個synchronized方法了,其它的線程只能等待,換句話說,某一時刻內,只有唯一一個線程去訪問這些synchronized方法,鎖的是當前對象this(俗稱對象鎖),被鎖定後,其它的線程都不能進入到當前對象的其它的synchronized方法

   加個普通方法後發現和同步鎖無關(三鎖)

   換成兩個對象後,不是同一把鎖了,情況立刻變化(四鎖)

   對於靜態同步方法,鎖的是當前類的Class對象。(五六七八鎖  【全局鎖】)

 

   

 

 

                                

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章