進程與線程 - 入門知識篇

前言

你們好啊,我是湯小圓。編程

今天給你們推薦的是,進程與線程的入門知識,但願對你們有幫助,謝謝。緩存

簡介

首先用術語來說一下,進程是系統進行資源調度和分配的基本單元,線程是進程的最小執行單元;安全

好比Windows中的任務管理器,就能夠看到正在運行的進程,以下所示多線程

進程-win10

PS:這裏要注意一點,程序不等於進程併發

程序是指令的集合,是靜態的;進程是正在執行的程序,是活的高併發

當你雙擊運行程序(.exe文件)時,程序的指令會加載到內存中,此時你就會獲得這個程序的進程spa

 

好了,術語講完了,接下來開始講人話.net

知識點

1. 進程和線程的關係是怎麼樣的呢?

進程能夠看做一個容器,線程就是容器內的最小執行單元;線程

咱們用一個例子來講明,好比有一個宿舍(進程),宿舍裏有兩我的(線程),一個廁所(共享資源)設計

宿舍和人的關係就是進程和線程的關係

一個進程能夠包含多個線程。

 

2. 既然有了進程,爲啥還要有線程呢?

  1. 每一個進程都有本身獨立的數據空間,進程之間不共享這些數據資源,通信不方便;

    可是線程不同,一個進程內的多個線程共享這個進程的數據資源,通信方便

  2. 多進程之間切換開銷大;

    可是多線程不會,線程來回切換開銷很小

    (這裏簡單解釋下,引入一個虛擬空間的概念,多個進程擁有不一樣的虛擬空間和緩存,可是多個線程共享進程的虛擬空間和緩存,進程切換以後,緩存失效,要從新去尋址虛擬空間,可是線程由於共享空間,緩存仍是能夠用的,因此比進程快)

     

3. 多線程都有哪些好處呢?

多線程相互協做,重複利用系統資源,提升系統吞吐率

若是隻是單個線程,那麼程序在執行比較耗時的操做(好比IO)時,CPU 是處於空閒的狀態,就會形成資源的浪費

可是多線程能夠切換到其餘線程,繼續執行其餘任務,從而充分利用CPU

好比咱們在看電影的時候,眼睛在工做,耳朵也在工做,這樣就能夠充分利用咱們的身體去享受電影;

可是若是眼睛和耳朵要分開工做,那就難受了(腦補一下聲音畫面不一樣步的場景)

 

4. 多線程要怎麼確保數據安全呢?

有多種方式:

  1. 局部變量,即單個線程內定義的局部變量只有本身可見,那確定是安全的

  2. 只讀對象,即共享的對象是隻讀的,那確定也是安全的

  3. 線程安全類,即類自己是線程安全的,那麼基於這個類的操做確定也是安全,好比StringBuffer類

  4. 同步與鎖機制,即用戶本身經過加鎖,來確保數據安全;這個會致使程序變得複雜且容易出現問題

 

5. 線程的生命週期都有哪些呢?

經過JDK源碼能夠看到,線程的生命週期有6個狀態,以下所示

 public enum State {
       NEW, // 建立了線程,可是啥也沒幹
       RUNNABLE, // 啓動了線程,處於運行狀態
       BLOCKED, // 阻塞了線程,處於阻塞狀態
       WAITING, // 等待狀態,沒有時間限制,直到有其餘事件通知
       TIMED_WAITING, // 等待狀態,有時間限制,時間到了,會返回到運行狀態
       TERMINATED; // 終止狀態,線程結束
  }

 

6. 這些狀態之間的關係是咋樣的呢?

能夠用一張圖來描述,以下所示,能夠看到除了NEW狀態和TERMINATED狀態,其餘狀態都是跟RUNNABLE狀態互通的

線程狀態圖

 

7. 那麼線程的建立 New 有幾種方式呢?

三種

  1. (不推薦)繼承Thread類,可是這樣的話不符合LSP原則(里氏替換原則,詳細內容可參考:https://www.jianshu.com/p/cf9f3c7c0df5

  2. (推薦)實現Runnable接口,比第一種靈活,也更加安全

  3. (推薦)實現Callable接口,相比於第二種,多了返回值異常拋出

 

8. BLOCKED 狀態通常什麼狀況下會出現呢?

遇到鎖的狀況下,若是鎖沒有釋放,那麼線程就會阻塞

 

9. WAITING 和 TIMED_WAITING有啥區別,不都是等待狀態嗎?

WAITING 狀態會無休止的等待下去,直到其餘事件通知它,它纔會中止等待,進入RUNNABLE狀態(被動)

TIMED_WAITING 狀態會有一個等待最長時間,若是到了等待最長時間,尚未人通知它,它會自動中止等待,進入RUNNABLE狀態(被動+主動)

 

總結

上面只是簡單介紹了線程和進程,真正要學的話東西仍是不少的

參考書籍

  1. Java併發編程實戰

  2. 實戰Java高併發程序設計(第二版)

參考連接

  1. 里氏替換原則:https://www.jianshu.com/p/cf9f3c7c0df5

後記

最後,感謝你們的觀看,謝謝。

相關文章
相關標籤/搜索