1. 程式人生 > >java-多線程思想解析

java-多線程思想解析

異步 nbsp 即使 clas 兩個 情況 ops font window

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-多線程思想解析