首頁>Club>
8
回覆列表
  • 1 # Java實戰技術

    多執行緒技術在Java技能圖譜中佔據了很重要的位置,也是體現Java程式設計能力的重要體現,所以學好多執行緒至關重要。

    多執行緒要學會如何使用執行緒、執行緒池、J.U.C等內容,研究其背後原理,做到熟練掌握及使用,並以此為基礎做擴充套件應用。

  • 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安全程式設計,熟悉大資料,熟悉多種安全協議,熟悉併發程式設計,有興趣的同學可以互相關注,互相學習!!!

  • 中秋節和大豐收的關聯?
  • 計算機和金融專業哪個好?