-
1 # Java實戰技術
-
2 # 迷茫君
多執行緒是java進階過程中一個非常重要的概念,設計的概念內容比較多,在學習多執行緒的時候可以從以下幾個方面入手,然後逐一深入擴充套件,注重實踐。(1)概念:執行緒是指程序中的最小單元,一個程序可以併發多條執行緒,而每條執行緒可以併發執行不同的任務。啟用多執行緒的意義在於充分的利用電腦資源完成程式任務。(2)生命週期新建---就緒---執行---阻塞---銷燬(3)建立執行緒的方法繼承Thread類;實現Runnable介面(4)對執行緒的操作同步,通訊,避免死鎖,啟停(5)使用環境
使用多執行緒是為了編寫高效的程式,明白什麼情況適合用多執行緒非常重要
如果想深入的話可以看看這本書《JAVA併發程式設計實踐》
-
3 # 此生唯一
JAVA中的多執行緒使用十分廣泛,很多的JAVA框架都使用到了多執行緒,比如spring,mybatis,druid等!
多執行緒有什麼好處呢?比如說web伺服器的多連線,非同步呼叫,並行操作,避免持續阻塞等等!
多執行緒怎麼實現呢?1,繼承Thread類,2,實現Runnable介面,3 實現callable+futureTask實現非同步回撥,4,使用執行緒池Executors.newFixedThreadPool(5);
多執行緒怎麼保證執行緒安全?
1,時間換空間:加鎖
①,synchronize:鎖方法,鎖程式碼段,鎖物件,鎖的粒度大!
②,reentrantlock:使用lock和unlock實現加鎖和解鎖,可使用ReadWriteLock讀寫鎖來實現讀和寫的鎖分離,底層使用CAS和AQS實現,這也是很多框架裡面用到的技術!
2,空間換時間:執行緒的本地變數隔離,ThreadLocal,實現一個執行緒一份變數,資料不共享,所以執行緒安全,spring中bean預設都是單例的,但是spring接受併發請求是執行緒安全的,就是因為使用threadlocal把請求,上下文資料裝在了執行緒裡。所以請求之間互不干涉!
JAVA多執行緒還涉及到哪些技術?
1,synchonizeHashmap,hashTable(基本上是鎖方法,所以效率低),concurrentHashmap(分段鎖,鎖粒度小,效能好),CopyOnWriteArrayList、CopyOnWriteArraySet(可重入鎖)等等!
2,countdownbatch用做計數器!
3,使用forkjoin做平行計算!
4,有鎖不如無鎖!
....
多瞭解這些技術下面底層的東西,多去實際情景中總結,犯錯然後改正才能更快的成長!
JAVA多執行緒知識點可以寫好幾本書,而隨便一個知識點都可以寫一章,只有經常鑽研並使用才能懂其精髓,希望我在這條路上越走越遠,以後學到的東西就記錄於此,互相學習,共勉。。
-
4 # 程式碼飼養員天齊
目前正在研究、學習、回顧Java程式設計知識,當然包括併發程式設計,正好針對此問題說一下個人的一些想法,更多的是將此想法與大家交流一下,希望大家多提意見。基本學習思路還是由淺入深,這也是我們學習的慣性思維。
第一,學習Java多執行緒,你得會用。這就是Java執行緒的實現方式。Java執行緒的實現主要是兩種方式,一種是繼承Thread類,一種是實現Runnable介面。這樣的話,可以先寫幾個測試程式,看看多執行緒是怎麼跑的。先獲得一個基本的認識。
第二、執行緒池的使用。四種執行緒池的建立方式和使用。
newCachedThreadPool建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。
newFixedThreadPool 建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。
newScheduledThreadPool 建立一個定長執行緒池,支援定時及週期性任務執行。
newSingleThreadExecutor 建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序執行。
第三、使用了一段併發程式設計後,可能會碰到執行緒安全的問題。執行緒安全問題主要在共享資源,寫入資料時發生。
第四、鎖的使用。可能大部分用的比較多的是synchronized。後面可能會逐漸接觸到ReentrantLock、ReadWriteLock等。
第五、用了一段時間後,開始學習一些原理性的東西。有了前面的基礎,再學習原理性的東西,就更容易理解。例如,執行緒的生命週期管理,執行緒池的工作原理等。
第六、執行緒的併發機制。實際上執行緒的併發機制涉及到切分CPU時間,CPU為每個執行緒分配CPU執行時間,執行完成後,進行上下文切換,執行緒的上下文切換是輕量級的,涉及到的命令數在100條左右,而程序的上下文切換時重量級的。這裡還可能涉及到執行緒數的最佳化問題,啟動多少執行緒可以讓效能更優。
第七、學習好併發程式設計,需要學習
java.util.concurrent
下的構件,這個包是為併發程式設計準備的,可以多加學習。實際上學習的過程就是學習,動手實踐,再學習,再動手實踐,不斷學習,不斷實踐。整個過程是螺旋上升的。
本人具有多年的java開發經驗,熟悉多種框架,熟悉網路程式設計,熟悉java安全程式設計,熟悉大資料,熟悉多種安全協議,熟悉併發程式設計,有興趣的同學可以互相關注,互相學習!!!
回覆列表
多執行緒技術在Java技能圖譜中佔據了很重要的位置,也是體現Java程式設計能力的重要體現,所以學好多執行緒至關重要。
多執行緒要學會如何使用執行緒、執行緒池、J.U.C等內容,研究其背後原理,做到熟練掌握及使用,並以此為基礎做擴充套件應用。