線程和進程的區別

簡單的來說

  • 一個程序至少有一個進程,一進程至少有一個線程

  • 線程的劃分大小小于進程,所以使得多線程程序的并發性能高!

  • 而且,進程在執行的過程中,有著自己獨立的內存單元,而多個線程共享內存,從而極大的提高了程序的運行效率.

而他們的區別在于:

每個獨立的線程有一個程序運行入口,順序執行序列和程序的出口.
但是線程不能夠獨立運行,必須是依賴程序,由程序提供多個個線程的執行控制!
從邏輯上看,多線程的意義在于一個程序中,有多個執行部分可以同時執行.但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的管理和資源分配,這是最重要的區別,也是最大的不同.

為什么這么說列?

* 進程,是一個具有獨立功能的程序,關于某個數據集合上的一次遠行活動,進程是系統進行資源分配和管理的獨立單位.
* 線程是進程的一個實體,是cpu在調度和分配的基本單位.
* 線程自己基本上不擁有系統的資源,它只是有一些運行必不可少的資源?但是它可以與同一進程中的其他線程共享進程所擁有的全部資源

!! 這同時也是 多線程的安全問題
因為多個線程同時訪問同一個數據,而現在的cpu 主頻,最低的也是1GHz吧, 也就是說 cpu 高達每秒幾十億的計算,你同一條數據,在 幾個線程中,以幾十億的概率被幾個線程同時訪問,不出現安全性才怪!
(如何解決此問題:把線程死鎖就可以有效的避免,數據重復讀取的問題了)

然后,創建線程有哪些方式?

  • 剛才也說了,一個進程至少有一個線程,當我們不做任何的處理的時候,就是單進程.
    而實現多線程
    • 要么繼承Thread類,創建線程子類
      重寫run 方法,這個run方法的方法體就代表了線程要完成的任務,大部分javaee工程師,都喜歡叫這個方法體為,執行體
      (然后調用對象的,start()方法,啟動該線程)
    • 要么就實現Runnable 接口創建線程類
      一樣的,重寫run方法,
      start啟動
      但是要注意:
      創建Runnable實例類的實例,是作為Thread的target來創建Thread對象的,這個Thread才是線程的真正對象.

思維導圖如下:

enter description here
enter description here
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容