java線程的基本概念


進程和線程

進程的誕生

  操作系統中有2個任務A,B,任務A先執行,執行到一半需要io,因此要大量時間,在這個時間段內cpu是空閑的,浪費了資源,於是就有進程,當A暫時無法利用cpu,但是又不能銷毀時,就把它暫存起來,讓B來執行。B執行完或者需要A執行時,根據暫存的信息回復過來。


  每個進程都對應一定的內存空間,並且只能使用自己的內存空間,並且保留程序的運行狀態,這個也為進程切換提供了基礎。

線程的誕生

  第一,多核處理器的出現,為了更好的利用多核處理器,避免資源的浪費。第二程序的需要,人們需要在一個程序中並發執行任務。比如播放器邊播放視頻,我們還要可以邊品論,顯然要並發執行。第三。一個程序中出現了阻塞(io)而導致程序不能繼續進行,這個很影響體驗和操作,因此我們需要多線程,把這些耗時的操作都丟到子線程里面去,這樣程序就可以繼續走下去了。

線程的基本概念和注意點

  1.對操作系統來說,資源分配的基本單位是進程,而調度的基本單位是線程。


  2.對於一個程序來說,不一定多線程的效率就高,不能盲目的使用,多線程的使用和具體業務場景(交互之類的),以及機器的特性,比如是多核還是單核的機器等


3.每個線程表示一條單獨的執行流,有自己的程序計數器,有自己的棧,但線程之間可以共享內存,它們可以訪問和操作相同的對象。


  4.java是單線程編程語言,你要是不主動創建線程,那么就默認只有主線程,當然jvm還是會有其他很多后台精靈線程存在的,比如垃圾回收
(Erlang就是一種並發編程語言,每一個函數都可以當做獨立的任務來驅動)

java線程的狀態

aaa
  1.新建:創建一個線程對象


  2.可運行:線程調用了start方法,存在於可運行線程池中。


  3.運行態:線程獲取到了cpu使用權。


  4.阻塞態:第一:運行的線程調用對象的wait()方法(該方法只存在於同步加鎖代碼塊中),讓出鎖,進入等待隊列。只用同樣調用該對象的線程使用notify()方法才會進入到鎖池中。 第二:運行的線程獲取一個加鎖的資源時,若該資源被占用,進入鎖隊列中,只用當鎖隊列中的線程獲取到了加鎖的對象資源時,才會進入到可運行狀態中。第三:運行的線程執行sleep()或者join()方法,或者io,該線程會阻塞隊列,等時間到,或者io完成,會自動進入可運行狀態。


  5.死亡:線程執行完,或者異常中斷退出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM