1. 程式人生 > >java 執行緒池簡單例子

java 執行緒池簡單例子

package com.hra.riskprice;

import com.hra.riskprice.SysEnum.Factor_Type;
import com.hra.riskprice.pojo.RskFactor;
import com.hra.riskprice.service.impl.RskFactorBulkMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.
*; import java.util.concurrent.*; @SpringBootApplication public class RiskpriceApplication { public static void main(String[] args) throws InterruptedException, ExecutionException{ new RiskpriceApplication().exec(); } void exec() throws InterruptedException, ExecutionException {
int xy=0; //進行非同步任務列表 List<FutureTask<Integer>> futureTasks = new ArrayList<FutureTask<Integer>>(); //執行緒池 初始化十個執行緒 和JDBC連線池是一個意思 實現重用 ExecutorService executorService = Executors.newFixedThreadPool(10); long start = System.currentTimeMillis();
int jj=0; //類似與run方法的實現 Callable是一個介面,在call中手寫邏輯程式碼 Callable<Integer> callable = new Callable<Integer>(){ @Override public Integer call() throws Exception { //System.out.println("任務執行 is "+jj1+"個"); Integer res = new Random().nextInt(100); Thread.sleep(1000); System.out.println("任務執行:獲取到結果 :"+res); return res; } }; for(int i=0;i<10;i++){ //建立一個非同步任務 FutureTask<Integer> futureTask = new FutureTask<Integer>(callable); jj=i; futureTasks.add(futureTask); //提交非同步任務到執行緒池,讓執行緒池管理任務 特爽把。 //由於是非同步並行任務,所以這裡並不會阻塞 executorService.submit(futureTask); } int count = 0; for (FutureTask<Integer> futureTask : futureTasks) { //futureTask.get() 得到我們想要的結果 //該方法有一個過載get(long timeout, TimeUnit unit) 第一個引數為最大等待時間,第二個為時間的單位 count+= futureTask.get(); } long end = System.currentTimeMillis(); System.out.println("執行緒池的任務全部完成:結果為:"+count+",main執行緒關閉,進行執行緒的清理"); System.out.println("使用時間:"+(end-start)+"ms"); //清理執行緒池 executorService.shutdown(); } }