File tree Expand file tree Collapse file tree 1 file changed +5
-9
lines changed Expand file tree Collapse file tree 1 file changed +5
-9
lines changed Original file line number Diff line number Diff line change @@ -366,9 +366,9 @@ public void allowCoreThreadTimeOut(boolean value) {
366366核心线程空闲时,其状态分为以下两种情况:
367367
368368- ** 设置了核心线程的存活时间** :核心线程在空闲时,会处于 ` WAITING ` 状态,等待获取任务。如果阻塞等待的时间超过了核心线程存活时间,则该线程会退出工作,将该线程从线程池的工作线程集合中移除,线程状态变为 ` TERMINATED ` 状态。
369- - ** 没有设置核心线程的存活时间** :核心线程在空闲时,会一直处于 ` WAITING ` 状态,等待获取任务。
369+ - ** 没有设置核心线程的存活时间** :核心线程在空闲时,会一直处于 ` WAITING ` 状态,等待获取任务,核心线程会一直存活在线程池中 。
370370
371- 当核心线程获取任务之后,会由 ` WAITING ` 状态变为 ` RUNNABLE ` 状态,之后去执行对应任务。
371+ 当队列中有可用任务时,会唤醒被阻塞的线程,线程的状态会由 ` WAITING ` 状态变为 ` RUNNABLE ` 状态,之后去执行对应任务。
372372
373373#### 相关源码
374374
@@ -378,14 +378,10 @@ public void allowCoreThreadTimeOut(boolean value) {
378378
379379在获取任务的时候,会根据 ` timed ` 值来决定从任务队列( ` BlockingQueue ` )获取任务的行为。
380380
381- 如果「设置了核心线程的存活时间」或者「线程数量超过了核心线程数量」,则将 ` timed ` 标记为 ` true ` ,表明获取任务时需要使用 ` poll() ` 指定超时时间,如果获取超时,则当前线程线程会退出线程池 。
381+ 如果「设置了核心线程的存活时间」或者「线程数量超过了核心线程数量」,则将 ` timed ` 标记为 ` true ` ,表明获取任务时需要使用 ` poll() ` 指定超时时间。
382382
383- - ` timed == true ` :使用 ` poll() ` 来获取任务。` poll() ` 方法会指定获取任务的等待时间,如果到达等待时间之后,还没有获取到任务,则会返回 ` null ` 。
384- - ` timed == false ` :使用 ` take() ` 来获取任务。` take() ` 方法是 ` BlockingQueue ` 中的阻塞方法,调用之后,线程会进入等待状态,直到从队列中获取任务。
385-
386- 因此,如果「设置了核心线程的存活时间」,核心线程没有在超时时间之内获取到任务,则会被销毁。
387-
388- 如果「没有设置核心线程的存活时间」,则核心线程在没有获取到任务时,会通过 ` take() ` 方法进行阻塞等待。
383+ - ` timed == true ` :使用 ` poll() ` 来获取任务。使用 ` poll() ` 方法获取任务超时的话,则当前线程会退出执行( ` TERMINATED ` ),该线程从线程池中被移除。
384+ - ` timed == false ` :使用 ` take() ` 来获取任务。使用 ` take() ` 方法获取任务会让当前线程一直阻塞等待(` WAITING ` )。
389385
390386源码如下:
391387
You can’t perform that action at this time.
0 commit comments