各位小夥伴看本博客之前,可以根據自身情況複習一下多線程,這是我自己總結的筆記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對象。(五六七八鎖 【全局鎖】)