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

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

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