# 總結Thread線程:狀態轉換、方法使用、原理分析
## 目錄
1. [線程基礎概念](#一線程基礎概念)
2. [線程狀態轉換](#二線程狀態轉換)
3. [核心方法詳解](#三核心方法詳解)
4. [線程實現原理](#四線程實現原理)
5. [線程安全與同步](#五線程安全與同步)
6. [線程池技術](#六線程池技術)
7. [實戰案例分析](#七實戰案例分析)
8. [總結與展望](#八總結與展望)
---
## 一、線程基礎概念
### 1.1 進程與線程的關系
- **進程**:操作系統資源分配的基本單位
- **線程**:CPU調度的最小單位,共享進程資源
- 對比表:
| 特性 | 進程 | 線程 |
|-------------|--------------------|--------------------|
| 資源占用 | 獨立內存空間 | 共享進程內存 |
| 創建開銷 | 大(需系統分配) | ?。◤陀觅Y源) |
| 通信方式 | IPC機制 | 共享變量 |
### 1.2 Java線程模型
```java
// 創建線程的兩種方式
class MyThread extends Thread {
public void run() {
System.out.println("繼承Thread方式");
}
}
class MyRunnable implements Runnable {
public void run() {
System.out.println("實現Runnable方式");
}
}
stateDiagram-v2
[*] --> NEW
NEW --> RUNNABLE: start()
RUNNABLE --> BLOCKED: 等待同步鎖
RUNNABLE --> WTING: wait()/join()
WTING --> RUNNABLE: notify()
RUNNABLE --> TIMED_WTING: sleep(n)
TIMED_WTING --> RUNNABLE: 超時結束
RUNNABLE --> TERMINATED: run()結束
NEW → RUNNABLE
start()
方法調用后,線程進入就緒隊列
RUNNABLE ? BLOCKED
競爭synchronized鎖時的狀態變化
WTING狀態
典型場景:生產者消費者模型中的wait()
調用
方法 | 作用域 | 釋放鎖 | 中斷響應 |
---|---|---|---|
sleep() | 靜態方法 | 否 | 是 |
wait() | Object類 | 是 | 是 |
yield() | 靜態方法 | 否 | 否 |
join() | 實例方法 | 是 | 是 |
// wait/notify典型用法
synchronized(lock) {
while(!condition) {
lock.wait(); // 釋放鎖進入WTING
}
// 處理業務邏輯
lock.notifyAll();
}
┌──────────────┐
│ 棧幀(局部變量) │
├──────────────┤
│ 操作數棧 │
├──────────────┤
│ 動態鏈接 │
├──────────────┤
│ 返回地址 │
└──────────────┘
// synchronized示例
public synchronized void method() {}
// ReentrantLock示例
Lock lock = new ReentrantLock();
lock.lock();
try {
// 臨界區
} finally {
lock.unlock();
}
// AtomicInteger實現片段
public final int getAndIncrement() {
return unsafe.getAndAddInt(this, valueOffset, 1);
}
new ThreadPoolExecutor(
corePoolSize, // 核心線程數
maximumPoolSize, // 最大線程數
keepAliveTime, // 空閑線程存活時間
TimeUnit.SECONDS, // 時間單位
new LinkedBlockingQueue() // 工作隊列
);
class Buffer {
private Queue<Integer> queue = new LinkedList<>();
private int capacity;
public synchronized void produce(int item) throws InterruptedException {
while(queue.size() == capacity) {
wait();
}
queue.add(item);
notifyAll();
}
}
(全文約11,550字,實際字數根據內容擴展調整) “`
注:此為文章框架,完整內容需要擴展以下部分: 1. 每個章節增加詳細原理說明 2. 補充更多代碼示例 3. 添加性能測試數據 4. 插入相關圖表和示意圖 5. 增加實際項目經驗分享 6. 補充JDK不同版本的差異比較 7. 添加故障排查案例分析
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。