java线程的基本概念
進程和線程
進程的誕生
操作系統中有2個任務A,B,任務A先執行,執行到一半需要io,因此要大量時間,在這個時間段內cpu是空閑的,浪費了資源,于是就有進程,當A暫時無法利用cpu,但是又不能銷毀時,就把它暫存起來,讓B來執行。B執行完或者需要A執行時,根據暫存的信息回復過來。
每個進程都對應一定的內存空間,并且只能使用自己的內存空間,并且保留程序的運行狀態,這個也為進程切換提供了基礎。
線程的誕生
第一,多核處理器的出現,為了更好的利用多核處理器,避免資源的浪費。第二程序的需要,人們需要在一個程序中并發執行任務。比如播放器邊播放視頻,我們還要可以邊品論,顯然要并發執行。第三。一個程序中出現了阻塞(io)而導致程序不能繼續進行,這個很影響體驗和操作,因此我們需要多線程,把這些耗時的操作都丟到子線程里面去,這樣程序就可以繼續走下去了。
線程的基本概念和注意點
1.對操作系統來說,資源分配的基本單位是進程,而調度的基本單位是線程。
2.對于一個程序來說,不一定多線程的效率就高,不能盲目的使用,多線程的使用和具體業務場景(交互之類的),以及機器的特性,比如是多核還是單核的機器等
3.每個線程表示一條單獨的執行流,有自己的程序計數器,有自己的棧,但線程之間可以共享內存,它們可以訪問和操作相同的對象。
4.java是單線程編程語言,你要是不主動創建線程,那么就默認只有主線程,當然jvm還是會有其他很多后臺精靈線程存在的,比如垃圾回收
(Erlang就是一種并發編程語言,每一個函數都可以當做獨立的任務來驅動)
java線程的狀態
1.新建:創建一個線程對象
2.可運行:線程調用了start方法,存在于可運行線程池中。
3.運行態:線程獲取到了cpu使用權。
4.阻塞態:第一:運行的線程調用對象的wait()方法(該方法只存在于同步加鎖代碼塊中),讓出鎖,進入等待隊列。只用同樣調用該對象的線程使用notify()方法才會進入到鎖池中。 第二:運行的線程獲取一個加鎖的資源時,若該資源被占用,進入鎖隊列中,只用當鎖隊列中的線程獲取到了加鎖的對象資源時,才會進入到可運行狀態中。第三:運行的線程執行sleep()或者join()方法,或者io,該線程會阻塞隊列,等時間到,或者io完成,會自動進入可運行狀態。
5.死亡:線程執行完,或者異常中斷退出。
轉載于:https://www.cnblogs.com/donghang/p/9233832.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的java线程的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OO学期总结
- 下一篇: 固定顶部指定div不滑动