如何深入Java多線程開發?

愛編程的欣欣


JAVA多線程技術太雜,隨著了jdk版本的逐漸迭代,越來越多的多線程技術被提出來,原本的還沒掌握又來了新的技術,但是萬變不離其宗,下面來看下多線程主要涉及哪些東西?


1,何為多線程?在計算機系統中,CPU負責計算,而內存負責數據存儲,線程就是操作系統用來進行運算調度的最小單位!顯然,多線程就是多個調度單位!

2,為什麼要使用多線程?

①,針對單核CPU,CPU在同一時間只能和一個線程進行交互,如果這個線程因為某些原因出現阻塞,那麼整個計算機就處於停滯狀態,為了避免這一現象,線程被設計為多線程執行模式,如果一個線程阻塞了,另外的線程可以繼續使用執行計算,這樣CPU使用效率就得到了極大的提升!

②,多核CPU:現在的計算機都被設計為多核的,能保證同一時間可以有多個運算單元,如果多核CPU卻只使用單線程,無疑更是極大的浪費了CPU資源!

多線程的使用在很多場景中(批量處理,並行計算等)有著極高的效率,所以使用多線程無疑是很重要的!


3,JAVA中的多線程:JAVA中的線程與操作系統的線程不是一個概念雖然都有相似的幾個線程狀態(new,runnable,running,block,waiting,dead),JVM只是操作系統中的一個進程,JAVA的多線程只是屬於jvm中的調度單元,具體關係常見如下解釋:https://www.zhihu.com/question/23096638

唯一需要注意的是,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框架。



任何技術都是為業務服務的,具體用什麼技術都還是需要看場景,之前分享了concurrentHashmap,CAS等,之後會有更多的多線程,JAVA方面的技術分享,敬請關注。。


哎喲JAVA不錯哦


java多線程的開發屬於java編程裡面高級層面應用,實際中應用的場景非常多,舉個簡單的例子,同時下載多個文件,同時接收多條數據,多個操作同時操作一個數據塊等等這方面涉及到的非常多,在開發app或者企業級應用方面都會涉及到。

簡單的來說多線程編程幾乎是所有編程語言裡面比較難的部分了,java經常提到的線程池核心也是這部分,其實多線程就是併發問題,為了提升效率,正常的多個事情可以事先排好隊列一個個的來也可以把事情做的很好,但是如果每個人都能去找前臺解決問題是不是更好,所以多線程的概念就出來了,在這當初算是軟件行業一個革命性的突破,現在幾乎所有的編程語言都具備這種屬性。多個人一起做事情,但如果共同操作一個數據塊豈不是要打架,於是臨界區的概念以及線程鎖也就出來了。保證在操作同一個數據區域的時候遵守一個規則,一個數據在一個時間段內只能有一個人來操作。

現在推薦幾本多線程和併發編程書籍

java併發編程實戰

java多線程編程核心技術

基本上兩本書看完對於多線程的以及併發性有一個大概的瞭解,然後自己寫個多線程操作的例子,可以寫個同時下載多個文件的例子。

多線程在網絡編程裡面涉及到的非常多,這塊骨頭啃不下就不要說對java已經很熟悉了。


大學生編程指南


對於新手來說多線程無疑最難理解的部分,平常我們練習最多的就是輸出一些參數,從db中增刪改查操作一些數據,這些都是單線程所做的事情,如果遇到了大數據量的處理,IO密集型的任務以及高併發的處理,這時就得用到多線程。

常用的實現方式就是繼承thread,或者實現Runnable接口,還有一種帶有返回值的方式,即實現callable接口來實現多線程的處理。當然線程頻繁的啟動和關閉是很耗資源的,於是就使用到了線程池。可以先學會使用java自帶的四種線程池,然後理解線程池的原理,比如corePoolSize核心線程數,maxPoolSize最大線程數,線程拒絕策略等。

單核cpu同時只能運行一個線程,在java中的線程是隨機執行的,內存中會有程序計數器記錄線程執行到了哪裡,由於線程的切換時間很短,肉眼看起來好像同時執行多個線程。所以單核cpu只能實現併發,而多核cpu才能使用多線程實現並行,充分利用cpu資源。

接下來多線程肯定會了解到線程安全的問題,實現線程安全的幾種方式,比如synchronized,lock,volatile,final關鍵字,Atomic類,countdownlatch,concurrent包下的類,CAS的實現原理,TLAB(thread local buffer allocation),線程優先級運行狀態,同步異步,以及由於鎖競爭導致的死鎖,守護線程的作用等。

歡迎大家留言討論


java攻城獅愛好者


第一步,建議先學好操作系統這門課,深入理解進程和線程,理解線程的狀態轉換和調度;

第二步,學習Java中線程的操作,Java對象的多線程特性,練習使用Java代碼操作線程和調度線程,線程池等高級操作;

第三步,學習並理解高手的多線程代碼。


分享到:


相關文章: