java-多線程思想解析
1.多線程定義:
在單個程序中同時運行多個線程完成不同的工作.多線程本質上是空間換時間.單個程序是什麽?一個正在執行的程序就是進程.線程是什麽?線程是程序中一個單一的順序控制流程.線程是程序中最小的執行單位,與進程同樣都為基本單元,在一些老式操作系統中是不存在線程這個概念存在的.在這類操作系統中是無法實現線程的.所以多線程與多進程都是依托於操作系統的,都是操作系統的概念不是某種語言的一個概念.在windows中進程之間的內存空間是互相獨立的,它的異步協同需要線程來完成,java在這種操作系統中是單進程多線程的體現.
2.多線程的應用場景:
多線程並不一定能提升性能(甚至還會降低性能);多線程也不只是為了提升性能.
1,避免阻塞:單線程中的程序是順序執行的.如果前方操作出現阻塞後方操作無法執行.此時多線程就能解決這類問題.例1:
a = a1 + a2;
b = b1 + b2;
在單線程如果a 操作阻塞那麽 b操作就無法執行,此時開啟兩個線程分別執行a,b就可以解決類似問題.
2,避免CPU空閑:在進行數據庫訪問,磁盤IO時對CPU的利用率並不高,在此時可以多線程執行其他的任務,來讓CPU繁忙起來.從而讓整體程序加快速度完成.
3,提升性能:需要進行空間換時間的情況下. 例2:
要從三個數據庫中取數據,每取一個數據庫需要耗費10秒那麽單線程則需要30秒,利用多線程多開兩個線程則需要10秒.
3.多線程的應用前提
1,任務具有並發性.如例1就可以使用多線程在下方情況是不行的,例3:
a = a1 + a2;
b = a + b1 ;
b運算依賴於a的運算結果,在這種情況下是不值得多線程的,因為無法帶來任何性能的提升.
2,只有在當前性能瓶頸是cpu的情況下,多線程才能實現提升性能的目的.例4:
一段程序在IO時(IOPS,IO吞吐量)拖慢了程序性能,即使把程序拆成兩個線程去運行,也無法帶來性能的提升.
3.機器硬件上必須是多核的,負責即使是拆成多個可並行子任務,也沒有多余的cpu去執行,只有一個cpu在多個線程中切換來卻換去憑空增加了額外的開銷.
java-多線程思想解析