【Java 并發編程】線程簡介 ( 并發類型 | 線程狀態 | CPU 數據緩存 )
文章目錄
一、并發類型
二、線程狀態
三、CPU 數據緩存
一、并發類型
并發類型 :
Thread
Runnable
Future
ThreadPool
其中
Runnable
,
ThreadPool
都是基于
Thread
執行的 ;
二、線程狀態
線程狀態 :
線程剛創建時 , 處于 "
新建狀態
" ;
調用線程 start() 方法之后 , 線程進入 Runnable "
可運行狀態
" , 此時等待 OS 調度分配
CPU 時間片
運行 ;
線程分配到
CPU 時間片
之后 , 線程進入 Running "
運行狀態
" , 如果線程分配的 CPU 時間片運行完畢 , 線程又回到 Runnable "
可運行狀態
" ;
如果運行過程中 , 手動調用了 Thread.sleep() 或 join()方法 , 線程進入了 "
阻塞狀態
" , 線程喚醒之后又回到 Runnable "
運行狀態
" ;
線程運行完畢之后 , 或者線程執行出現異常 , 進入 Dead "
死亡狀態
" ;
三、CPU 數據緩存
程序執行時 , 主要是 CPU 執行程序中的指令 , 指令的運行 , 還需要
加載相應的數據 ;
CPU 運行的速度很快 , 如果每次
使用 I/O 總線訪問內存獲取 CPU 執行所需的數據
, 無法將 CPU 的性能優勢發揮到最大 ;
數據從
磁盤
中讀取 , 加入到
內存
中 , 線程執行后 , 會將需要操作的數據加入到
CPU 緩存
中 ;
CPU 緩存分為 L1 , L2 , L3 , 3 3 3 個級別的緩存 , 如下圖所示 ;
CPU 執行線程時 , 不直接操作內存中的數據 , 而是通過 CPU 緩存進行處理 ;
JMM ( Java Memory Model - Java 內存模型 ) 參考了 CPU 緩存模型 , CPU 都是多核的 ,
每個核中都有 L1 和 L2 緩存 ,
L3 緩存整個 CPU 的所有核心共同使用 ;
Java 內存模型只是一種規范 ;
Java 虛擬機運行時內存 , 是不同的虛擬機實現的不同的內存使用方式 ;
每種虛擬機的底層實現都是不同的 ;
Java 線程 運行時 , 每個 Java 線程都配套一個
工作內存
, 然后工作內存從
主內存
中獲取數據 , 主內存被所有工作內存共享 ;
工作內存 就是 線程的
本地內存
, 其中存儲的是主內存中的
變量副本
, 使用主內存的變量前 ,
先將變量拷貝工作內存中 ;
當在線程中
修改了工作內存中的數據
, 需要同時
將變量的修改同步到主內存中 ;
這里的 工作線程 / 本地線程 相當于 CPU 中的 L1 / L2 緩存 , 主內存 相當于 CPU 中的 L3 緩存 ;
如果多個線程同時對 主內存 中的同一個變量進行修改 , 變量的值被不同線程按照不同順序進行改變 , 主線程中的這個變量是
線程不安全的 ;
Java 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。