【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 , 333 個級別的緩存 , 如下圖所示 ;
CPU 執行線程時 , 不直接操作內存中的數據 , 而是通過 CPU 緩存進行處理 ;
JMM ( Java Memory Model - Java 內存模型 ) 參考了 CPU 緩存模型 , CPU 都是多核的 , 每個核中都有 L1 和 L2 緩存 , L3 緩存整個 CPU 的所有核心共同使用 ;
Java 內存模型只是一種規范 ;
Java 虛擬機運行時內存 , 是不同的虛擬機實現的不同的內存使用方式 ;
每種虛擬機的底層實現都是不同的 ;
Java 線程 運行時 , 每個 Java 線程都配套一個 工作內存 , 然后工作內存從 主內存 中獲取數據 , 主內存被所有工作內存共享 ;
- 工作內存 就是 線程的 本地內存 , 其中存儲的是主內存中的 變量副本 , 使用主內存的變量前 , 先將變量拷貝工作內存中 ;
- 當在線程中 修改了工作內存中的數據 , 需要同時 將變量的修改同步到主內存中 ;
這里的 工作線程 / 本地線程 相當于 CPU 中的 L1 / L2 緩存 , 主內存 相當于 CPU 中的 L3 緩存 ;
如果多個線程同時對 主內存 中的同一個變量進行修改 , 變量的值被不同線程按照不同順序進行改變 , 主線程中的這個變量是 線程不安全的 ;
總結
以上是生活随笔為你收集整理的【Java 并发编程】线程简介 ( 并发类型 | 线程状态 | CPU 数据缓存 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java 并发编程】线程简介 ( 进程
- 下一篇: 【Java 并发编程】线程简介 ( 原子