java future get阻塞_验证Future.get阻塞性,阻塞的是什么

本文通过一个具体的Java线程池示例程序,展示了如何使用ThreadPoolExecutor来管理并发任务的执行过程。包括线程池的创建、任务提交、异常处理及线程池关闭等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.fengjr.p2passet.riskcontrol.web.loan;importcom.fengjr.p2passet.service.auto.thread.pool.ProcessRejectedExecutionHandler;importcom.fengjr.p2passet.service.auto.thread.pool.ThreadPool;importcom.google.common.collect.Lists;importlombok.Data;importjava.util.ArrayList;importjava.util.List;import java.util.concurrent.*;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;public classTest {public static void main(String[] args) throwsExecutionException, InterruptedException {

ExecutorService service= new ThreadPoolExecutor(5,10,5,TimeUnit.SECONDS,new LinkedBlockingQueue(20),Executors.defaultThreadFactory(),newProcessRejectedExecutionHandler());

List> futures = new ArrayList>(100);

@DataclassTemp {intiT;

}

List list = new ArrayList(20);for (int i=0; i<20; i++) {

Temp temp= newTemp();

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() {

@Overridepublic String call() throwsException {

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值