Java中的异步多线程技术

本文探讨了Java中实现异步多线程的技术,包括如何建立用户自定义线程池,并提供了不同场景下的异步多线程应用示例和代码片段。
摘要由CSDN通过智能技术生成

在开发中有时经常用到异步多线程技术来快速高效完成某些任务,那常用的异步多线程技术参考如下:

1,建立一个用户自定义线程池

/**
* 自定义用户线程池,
* 注意:避免系统默认的线程池出现的性能问题
*/
@Bean("myExecutor")
public Executor myExecutor() {
	ThreadPoolTaskExector executor = new ThreadPoolTaskExector();
	
	//核心线程数
	executor.setCorePoolSize(10);	
	
	//最大线程数
	executor.setMaxPoolSize(20);	
	
	//队列中等待处理的最大的数目
	executor.setQueueCapacity(200);	
	
	//线程空闲后的最大存活时间单位秒
	executor.setKeepAliveSeconds(120);
	
	//对拒绝task的处理策略
	//rejection-policy:当pool已经达到max size的时候,如何处理新任务
	//CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行
	executor.setRejectedExecutionHandler(new ThreadPoolExector.CallerRunsPolicy());
	
	//线程名称前缀
	executor.setThreadNamePrefix("myExecutor-thread-pool-");
	return executor;
}

2,各种场景的异步多线程参考如下注释和代码片段

/**
Java技术
1,异步多线程并行执行
注意:
myExecutor 为自定义的线程池;
runAsync 方法不支持返回值
supplyAsync 可以支持返回值
**/
String param01 = "...";
int param02 = "...";
CompletableFuture.supplyAsync((param01, param02) -> {
	try {
		String msg = xxService.fun01(param01, param02);
		return msg;
	} catch(Exception e){
		throw e;
	} finally{
		// 最后执行
		// todo...
	}
},myExecutor);
/**
2,异步多线程并行执行,某线程执行完,然后再执行后续如回调操作,
注意:
myExecutor 为自定义的线程池;
whenComplete 和 whenCompleteAsync 的区别:
whenComplete:是执行当前任务的线程执行继续执行 whenComplete 的任务。
whenCompleteAsync:是执行把 whenCompleteAsync 这个任务继续提交给线程池来进行执行。
exceptionally:异常处理方法
*/
String param01 = "...";
int param02 = "...";
CompletableFuture.supplyAsync((param01, param02) -> {
	try {
		String msg = xxService.fun01(param01, param02);
		return msg;
	} catch(Exception e){
		throw e;
	} finally{
		// todo...
	}
},myExecutor).whenComplete((result, error) -> {	
	// 单线程内执行完,然后再执行后续回调等操作
	// 此处参数 result 其实就是上面返回的msg对象
	String msg2 = xxService.fun02(result);
	return msg2;
	// todo...
}).exceptionally((throwable) -> {
	// 异常时执行
	// todo...
	result "发生异常";
});
/**
3,异步多线程并行执行,某单个线程内又有串行执行,单线程内执行完,然后再执行后续如回调操作,
注意:
myExecutor 为自定义的线程池;
handle 方法和 thenApply 方法处理方式基本一样;不同的是:
handle 是在任务完成后再执行,还可以处理异常的任务。
thenApply 只可以执行正常的任务,任务出现异常则不执行 thenApply 方法
*/
String param01 = "...";
int param02 = "...";
CompletableFuture.supplyAsync((param01, param02) -> {
	/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值