如何深入Java多線程開發?
JAVA多線程技術太雜,隨著了jdk版本的逐漸迭代,越來越多的多線程技術被提出來,原本的還沒掌握又來了新的技術,但是萬變不離其宗,下面來看下多線程主要涉及哪些東西?
1,何為多線程?在計算機系統中,CPU負責計算,而內存負責數據存儲,線程就是操作系統用來進行運算調度的最小單位!顯然,多線程就是多個調度單位!
2,為什么要使用多線程?
①,針對單核CPU,CPU在同一時間只能和一個線程進行交互,如果這個線程因為某些原因出現阻塞,那么整個計算機就處于停滯狀態,為了避免這一現象,線程被設計為多線程執行模式,如果一個線程阻塞了,另外的線程可以繼續使用執行計算,這樣CPU使用效率就得到了極大的提升!
②,多核CPU:現在的計算機都被設計為多核的,能保證同一時間可以有多個運算單元,如果多核CPU卻只使用單線程,無疑更是極大的浪費了CPU資源!
多線程的使用在很多場景中(批量處理,并行計算等)有著極高的效率,所以使用多線程無疑是很重要的!

3,JAVA中的多線程:JAVA中的線程與操作系統的線程不是一個概念雖然都有相似的幾個線程狀態(new,runnable,running,block,waiting,dead),JVM只是操作系統中的一個進程,JAVA的多線程只是屬于jvm中的調度單元,
唯一需要注意的是,JAVA中的多線程都是搶占式的,由jvm進行調度!

4,實現多線程的幾種方式:①繼承Thread,②實現Runnable接口,Callable接口,③使用線程池!
⑤,線程安全可使用技術:synchronize加鎖,ReenTrantLock可沖入鎖,ReadWriteLock讀寫鎖,CAS原子命令(J.U.C下以Atomic打頭的類基本用CAS實現)樂觀鎖,AQS抽象隊列式同步器;
⑥,JDK中的并發容器:StringBuffer,Vector,SynchronizeMap,HashTable,concurrentHashmap(分段鎖思想),ConcurrentLinkedQueue,CopyOnWriteArrayList(高效讀取),ThreadLocal(一個線程,一份變量)
⑦,網絡IO:BIO(同步阻塞IO),NIO(同步非阻塞),AIO(異步阻塞)
⑧,并行處理:callable+ future異步回調,forkjoin框架。
