线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期
1 程序、進程、線程之間的區別與聯系
三者之間的形象化理解:
* 程序:代碼實現了功能,就是程序,是靜態的;
* 進程:執行中的程序就是進程,是動態的;
* 線程:進程內的一個執行單元,也是進程內的可調度實體,可以并發執行提高了進程的效率。
進程和線程的關系:
(1)一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程。
(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。
(3)處理機分給線程,即真正在處理機上運行的是線程。
(4)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
線程與進程的區別:
(1) 調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位 。
(2) 并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行 。
(3) 擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源。
(4) 系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。但是進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。
程序與進程的區別:
程序是指令的有序集合,其本身沒有任何運行的含義,是一個靜態的概念。而進程是程序在處理機上的一次執行過程,它是一個動態的概念。
程序可以作為一種軟件資料長期存在,而進程是有一定生命期的。程序是永久的,進程是暫時的。
進程更能真實地描述并發,而程序不能;進程是由程序和數據兩部分組成的。進程具有創建其他進程的功能,而程序沒有。
同一程序同時運行于若干個數據集合上,它將屬于若干個不同的進程。也就是說同一程序可以對應多個進程。
2 Java的線程狀態和生命周期
新建狀態:
使用 new 關鍵字和 Thread 類或其子類建立一個線程對象后,該線程對象就處于新建狀態。它保持這個狀態直到程序 start() 這個線程。
就緒狀態:
當線程對象調用了start()方法之后,該線程就進入就緒狀態。就緒狀態的線程處于就緒隊列中,要等待JVM里線程調度器的調度。
運行狀態:
如果就緒狀態的線程獲取 CPU 資源,就可以執行 run(),此時線程便處于運行狀態。處于運行狀態的線程最為復雜,它可以變為阻塞狀態、就緒狀態和死亡狀態。
阻塞狀態:
如果一個線程執行了sleep(睡眠)、suspend(掛起)等方法,失去所占用資源之后,該線程就從運行狀態進入阻塞狀態。在睡眠時間已到或獲得設備資源后可以重新進入就緒狀態。可以分為三種:
死亡狀態:
一個運行狀態的線程完成任務或者其他終止條件發生時,該線程就切換到終止狀態。
同個人博客:https://www.serendipper-x.cn/
總結
以上是生活随笔為你收集整理的线程知识点(一)—— 程序、进程、线程之间的区别与联系、Java的线程状态和生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牛客21297 手机号码
- 下一篇: 牛客21783 牛牛的星际旅行