執行緒池-isShutdown和isTerminated
1.執行緒池 isShutdown和isTerminated的區別
isShutDown當呼叫shutdown()方法後返回為true。
isTerminated當呼叫shutdown()方法後,並且所有提交的任務完成後返回為true
執行緒池任務正常完成,都為false
package com.cweeyii.threadpool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* Created by wenyi on 16/10/16.
* Email:[email protected]
*/
public class ShutDownWait {
private static final Logger LOGGER = LoggerFactory.getLogger(ShutDownWait.class);
public static void main(String[] args) throws InterruptedException {
int workerNum = 2 ;
ExecutorService executorService = Executors.newFixedThreadPool(workerNum);
for (int i = 0; i < workerNum; i++) {
executorService.submit(new SleepWorker());
}
//executorService.shutdown();
//LOGGER.info("shutdown=" + executorService.isShutdown() + " terminate=" + executorService.isTerminated());
executorService.awaitTermination(10, TimeUnit.SECONDS);
LOGGER.info("shutdown="+executorService.isShutdown()+" terminate="+executorService.isTerminated());
LOGGER.info("呼叫shutdown會立即返回不會等待執行緒池任務執行完");
}
}
12:56:58.849 INFO (SleepWorker.java:31) - threadName=pool-1-thread-1 執行緒結束null工作
12:56:58.849 INFO (SleepWorker.java:31) - threadName=pool-1-thread-2 執行緒結束null工作
12:57:06.843 INFO (ShutDownWait.java:26) - shutdown=false terminate=false
12:57:06.846 INFO (ShutDownWait.java:27) - 呼叫shutdown會立即返回不會等待執行緒池任務執行完
取消註釋後結果:
13:57:08.518 INFO (ShutDownWait.java:24) - shutdown=true terminate=false
13:57:10.523 INFO (SleepWorker.java:31) - threadName=pool-1-thread-1 執行緒結束null工作
13:57:10.523 INFO (SleepWorker.java:31) - threadName=pool-1-thread-2 執行緒結束null工作
13:57:10.526 INFO (ShutDownWait.java:26) - shutdown=true terminate=true
13:57:10.527 INFO (ShutDownWait.java:27) - 呼叫shutdown會立即返回不會等待執行緒池任務執行完
相關推薦
執行緒池-isShutdown和isTerminated
1.執行緒池 isShutdown和isTerminated的區別 isShutDown當呼叫shutdown()方法後返回為true。 isTerminated當呼叫shutdown()方法後,並
執行緒池submit和execute方法區別(類似callable和runnable)
執行緒池中的execute方法大家都不陌生,即開啟執行緒執行池中的任務。還有一個方法submit也可以做到,它的功能是提交指定的任務去執行並且返回Future物件,即執行的結果。下面簡要介紹一下兩者的三個區別: 1、接收的引數不一樣 2、submit有返回值,而execute沒有 用到返
SpringBoot 進階系列二 @EnableAsync和@Async 執行緒池定義和使用
在spring傳統自定義執行緒池,是在xml配置檔案中進行配置如: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:
java執行緒池ThreadPoolExecutor和阻塞佇列BlockingQueue,Executor, ExecutorService
ThreadPoolExecutor 引數最全的建構函式 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
執行緒池建立和多執行緒等待
在部落格園看到一篇部落格 C# -- 使用執行緒池 ThreadPool 執行多執行緒任務 在這裡使用了執行緒池 雖然也實現了執行緒等待 但是執行緒等待實現的太死板 如果定義未知數量的執行緒池無法實現等待 ManualResetEvent數量已經定死 所
執行緒池 submit 和 execute
publicclass RunnableTestMain { public staticvoid main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(2
Springmvc執行緒池配置和使用
1.Springmvc執行緒池配置: 在spring上下文檔案ApplicationContext.xml中新增 <!-- 執行緒池配置 --> <bean id="threadPool" class="org.springframework.sch
Java執行緒池原理和使用
為什麼要用執行緒池? 諸如 Web 伺服器、資料庫伺服器、檔案伺服器或郵件伺服器之類的許多伺服器應用程式都面向處理來自某些遠端來源的大量短小的任務。請求以某種方式到達伺服器,這種方式可能是通過網路協議(例如 HTTP、FTP 或 POP)、通過 JMS 佇列或者可能通過
Java 執行緒池原理和佇列詳解
http://blog.csdn.net/xx326664162/article/details/51701508 執行緒池的框架圖: 1、Executor任務提交介面與Executors工具類 Executor框架同Java.util.
血的教訓--如何正確使用執行緒池submit和execute方法
血的教訓之背景:使用執行緒池對存量資料進行遷移,但是總有一批資料遷移失敗,無異常日誌列印 凶案起因 聽說parallelStream並行流是個好東西,由於日常開發stream序列流的場景比較多,這次需要寫遷移程式剛好可以用得上,那還不趕緊拿來裝*一下,此時不裝更待何時。機智的我還知道在 JVM 的後臺
多執行緒:執行緒池理解和使用總結
建立和銷燬執行緒非常損耗效能,那有沒有可能複用一些已經被建立好的執行緒呢?答案是肯定的,那就是執行緒池。 另外,執行緒的建立需要開闢虛擬機器棧、本地方法棧、程式計數器等執行緒私有的記憶體空間,線上程銷燬時需要回收這些系統資源,頻繁地建立銷燬執行緒會浪費大量資源,而通過複用已有執行緒可以更好地管理和協調執行緒的
JAVA多執行緒(三) 執行緒池和鎖的深度化
github演示程式碼地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/src/main/java/com/kawa/thread 1.執行緒池 1.1 執行緒池是什麼 Java中的執行緒
java執行緒池(有返回值和無返回值)
無返回值: package ThreadPool2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class test { public stat
Java併發程式設計:4種執行緒池和緩衝佇列BlockingQueue
一. 執行緒池簡介 1. 執行緒池的概念: 執行緒池就是首先建立一些執行緒,它們的集合稱為執行緒池。使用執行緒池可以很好地提高效能,執行緒池在系統啟動時即建立大量空閒的執行緒,程式將一個任務傳給執行緒池,執行緒池就會啟動一
執行緒池--拒絕策略RejectedExecutionHandler 原理和實驗
當執行緒池的任務快取佇列已滿並且執行緒池中的執行緒數目達到maximumPoolSize,如果還有任務到來就會採取任務拒絕策略,通常有以下四種策略: ThreadPoolExecutor.AbortPolicy:丟棄任務並丟擲RejectedExecutionException
Quartz應用——Spring和Quartz加執行緒池實際應用
公司最近開發需要用到定時任務,引用了微服務的概念,但是開發還是spring相關的專案,沒有用到SpringCloud相關的微服務框架。定時任務我就沒選擇xxx-job,Elastic-Job。選擇了Quartz,簡單方便而且拓展行也高。 Spring是一個很優秀的框架,它無縫的集成了Quartz
2.3四種執行緒連線池的配置和使用(和自定義執行緒池)
四種執行緒連線池的配置和使用 最終呼叫類和方法 {引數有 核心執行緒數目,最大執行緒數目,存活時間(當前執行緒執行完這個任務之後,等待下一個任務到來的最長等待時間。如果在這個時間內沒有新的任務來到,那當前執行緒就會退出),時間單位,等待佇列(用於存放待執行的任務)} public
【小家Java】一次Java執行緒池誤用(newFixedThreadPool)引發的線上血案和總結
相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9
利用threading模組和queue模組在python3直譯器上建立一個簡單的python執行緒池
python直譯器沒提供執行緒池模組,故在python3上自定義python執行緒池簡單版本,程式碼如下 #用threading queue 做執行緒池 import queueimport threadingclass ThreadPool(): def __init__(self,arg):#建
用程序池和執行緒池實現高併發伺服器
思想: 1. 建立與伺服器相同cpu個數的程序個數來監聽(accept)客戶端響應,並在每個程序中先建立好一個執行緒池 2. 有客戶端訪問時,解除其中一個程序的accpet阻塞,進入到執行緒中來執行接收資料工作( recv() ),用執行緒防止recv阻塞,執行緒呼叫recv方法 3.