1. 程式人生 > >軟件構造之並發編程

軟件構造之並發編程

兩種 情況 http img tin bubuko java線程 bsp 線程

並發與並行

在單核機器上,“多進程”並不是真正的多個進程在同時執行,而是通過CPU時間分片,操作系統快速在進程間切換而模擬出來的多進程。我們通常把這種情況成為並發,也就是多個進程的運行行為是“一並發生”的,但不是同時執行的,因為CPU核數的限制(PC和通用寄存器只有一套,嚴格來說在同一時刻只能存在一個進程的上下文)。
現在,我們使用的計算機基本上都搭載了多核CPU,這時,我們能真正的實現多個進程並行執行,這種情況叫做並行,因為多個進程是真正“一並執行”的(具體多少個進程可以並行執行取決於CPU核數)。綜合以上,我們知道,並發是一個比並行更加寬泛的概念。也就是說,在單核情況下,並發只是並發;而在多核的情況下,並發就變為了並行。下文中我們將統一用並發來指代這一概念。

線程的狀態

Java線程在運行的生命周期中可能處於下表所示的6種不同的狀態,在給定的一個時刻,線程只能處於其中的一個狀態。

狀態名稱說明
NEW 初始狀態,線程被構建,但是還沒有調用start()方法
RUNNABLE 運行狀態,Java線程將操作系統中的就緒和運行兩種狀態籠統地稱作“運行中”
BLOCKED 阻塞狀態,表示線程阻塞於鎖
WAITING 等待狀態,表示線程進入等待狀態,進入該狀態表示當前線程需要等待其他線程做出一些特定動作(通知或中斷)
TIME_WAITING 超時等待狀態,該狀態不同於WAITING,它是可以在指定的時間自行返回的
TERMINATED

終止狀態,表示當前線程已經執行完畢

線程狀態轉換: 技術分享圖片

圖片引用:http://www.cnblogs.com/dolphin0520/p/3920357.html

軟件構造之並發編程