Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[docs update]核心线程空闲时状态
  • Loading branch information
1020325258 committed Dec 29, 2024
commit d6eca60aadc7def1b7aa4aad41ef17280846bb60
4 changes: 2 additions & 2 deletions docs/java/concurrent/java-concurrent-questions-03.md
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ public void allowCoreThreadTimeOut(boolean value) {

核心线程空闲时,其状态分为以下两种情况:

- **设置了核心线程的存活时间** :核心线程在空闲时,会处于阻塞状态,等待获取任务。如果阻塞等待的时间超过了核心线程存活时间,则该核心线程会被销毁
- **设置了核心线程的存活时间** :核心线程在空闲时,会处于阻塞状态,等待获取任务。如果阻塞等待的时间超过了核心线程存活时间,则该线程会退出工作,之后将该线程从线程池的工作线程集合中移除
- **没有设置核心线程的存活时间** :核心线程在空闲时,会一直处于阻塞状态,等待获取任务。

#### 相关源码
Expand All @@ -376,7 +376,7 @@ public void allowCoreThreadTimeOut(boolean value) {

在获取任务的时候,会根据 `timed` 值来决定从任务队列( `BlockingQueue` )获取任务的行为。

如果「设置了核心线程的存活时间」或者「线程数量超过了核心线程数量」,则将 `timed` 标记为 `true`
如果「设置了核心线程的存活时间」或者「线程数量超过了核心线程数量」,则将 `timed` 标记为 `true` ,表明获取任务时需要使用 `poll()` 指定超时时间,如果获取超时,则当前线程线程会退出线程池。

- `timed == true` :使用 `poll()` 来获取任务。`poll()` 方法会指定获取任务的等待时间,如果到达等待时间之后,还没有获取到任务,则会返回 `null`。
- `timed == false` :使用 `take()` 来获取任务。`take()` 方法是 `BlockingQueue` 中的阻塞方法,调用之后,线程会进入等待状态,直到从队列中获取任务。
Expand Down