1. 程式人生 > >驗證Future.get阻塞性,阻塞的是什麽

驗證Future.get阻塞性,阻塞的是什麽

import ++ 讓我 efault lombok actor exec asset ces

package com.fengjr.p2passet.riskcontrol.web.loan;

import com.fengjr.p2passet.service.auto.thread.pool.ProcessRejectedExecutionHandler;
import com.fengjr.p2passet.service.auto.thread.pool.ThreadPool;
import com.google.common.collect.Lists;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Test { public static void main(String[] args) throws ExecutionException, InterruptedException { ExecutorService service
= new ThreadPoolExecutor(5,10,5,TimeUnit.SECONDS,new LinkedBlockingQueue<Runnable>(20),Executors.defaultThreadFactory(), new ProcessRejectedExecutionHandler()); List<Future<?>> futures = new ArrayList<Future<?>>(100); @Data class Temp {
int iT; } List<Temp> list = new ArrayList(20); for (int i=0; i<20; i++) { Temp temp = new Temp(); temp.setIT(i); list.add(temp); } for(int i=0;i<20;i++){ final Temp temp = list.get(i); Future<?> future = service.submit( new Callable<String>() { @Override public String call() throws Exception { String threadName = Thread.currentThread().getName(); System. out.println("線程任務" + temp.getIT() + ",線程"+threadName+"在進行計算"); if(temp.getIT() == 2){ System. out.println("提交的線程任務"+temp.getIT()+",線程"+threadName+"現在休眠"); Thread.sleep(5000); System. out.println("提交的線程任務" + temp.getIT()+",線程"+threadName+",醒來!!!!"); } //Thread.sleep(3000); return "線程任務" + temp.getIT()+",線程名稱"+threadName; } }); futures.add(future); } //System. out.println("主線程---------------------" + Thread.currentThread ().getName() + "在執行任務" ); for(Future<?> item:futures){ try { System. out.println("線程運行結果---------------" + item.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } //System. out.println("--------------所有任務執行完畢" ); service.shutdown(); } }

讓我們看一下上面的程序執行結果:

線程任務0,線程pool-1-thread-1在進行計算
線程任務3,線程pool-1-thread-4在進行計算
線程任務1,線程pool-1-thread-2在進行計算
線程任務2,線程pool-1-thread-3在進行計算
線程任務7,線程pool-1-thread-1在進行計算
線程任務6,線程pool-1-thread-2在進行計算
線程任務5,線程pool-1-thread-4在進行計算
線程任務4,線程pool-1-thread-5在進行計算
線程任務10,線程pool-1-thread-4在進行計算
線程運行結果---------------線程任務0,線程名稱pool-1-thread-1
線程任務9,線程pool-1-thread-2在進行計算
線程任務8,線程pool-1-thread-1在進行計算
提交的線程任務2,線程pool-1-thread-3現在休眠
線程任務14,線程pool-1-thread-1在進行計算
線程任務13,線程pool-1-thread-2在進行計算
線程運行結果---------------線程任務1,線程名稱pool-1-thread-2
線程任務12,線程pool-1-thread-4在進行計算
線程任務11,線程pool-1-thread-5在進行計算
線程任務17,線程pool-1-thread-4在進行計算
線程任務16,線程pool-1-thread-2在進行計算
線程任務15,線程pool-1-thread-1在進行計算
線程任務19,線程pool-1-thread-4在進行計算
線程任務18,線程pool-1-thread-5在進行計算
提交的線程任務2,線程pool-1-thread-3,醒來!!!!
線程運行結果---------------線程任務2,線程名稱pool-1-thread-3
線程運行結果---------------線程任務3,線程名稱pool-1-thread-4
線程運行結果---------------線程任務4,線程名稱pool-1-thread-5
線程運行結果---------------線程任務5,線程名稱pool-1-thread-4
線程運行結果---------------線程任務6,線程名稱pool-1-thread-2
線程運行結果---------------線程任務7,線程名稱pool-1-thread-1
線程運行結果---------------線程任務8,線程名稱pool-1-thread-1
線程運行結果---------------線程任務9,線程名稱pool-1-thread-2
線程運行結果---------------線程任務10,線程名稱pool-1-thread-4
線程運行結果---------------線程任務11,線程名稱pool-1-thread-5
線程運行結果---------------線程任務12,線程名稱pool-1-thread-4
線程運行結果---------------線程任務13,線程名稱pool-1-thread-2
線程運行結果---------------線程任務14,線程名稱pool-1-thread-1
線程運行結果---------------線程任務15,線程名稱pool-1-thread-1
線程運行結果---------------線程任務16,線程名稱pool-1-thread-2
線程運行結果---------------線程任務17,線程名稱pool-1-thread-4
線程運行結果---------------線程任務18,線程名稱pool-1-thread-5
線程運行結果---------------線程任務19,線程名稱pool-1-thread-4

  

驗證Future.get阻塞性,阻塞的是什麽