API前置系统开发流程:7.线程池的使用(异步回调接口)

为了实现同步实时对请求方做出通讯级别的响应,并同时出发异步回调方法,引用了多线程处理。多线程使用的不多,为了方便和安全,采用了线程池threadFactory。
1.首先创建一个线程池的常量类

@Service
public class ConstantThreadPool {
	private final static ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("name" + "-%d").setDaemon(true).build();

	private final static ExecutorService pool = ConstantThreadPool.createCacheThreadPool();
	
	public ExecutorService getPool() {
		return pool1;
	}
	public final static ExecutorService createCacheThreadPool(){
		int coreSize = 50;
		int maxSize = 80;
		return new ThreadPoolExecutor(coreSize, maxSize, 60L, TimeUnit.SECONDS,
				new SynchronousQueue<Runnable>(), threadFactory, new ThreadPoolExecutor.AbortPolicy());
	}

}

因为在使用时,为了避免重复创建线程池,所以使用注入的方式,所以我把它加上了service注解。
线程池的参数时核心线程数为50,最大线程数为80,线程的等待时间为60秒

2.在实现类中通过注入的方式使用线程池

@Autowired
ConstantThreadPool constantThreadPool;

3.编写Runnable实现类

public class RunnableImpl implements Runnable {

	private static Logger logger = LoggerFactory.getLogger(OverBankRunnableImpl.class);
	
	private TransBranchService transBranchService;
	
	public RunnableImpl(TransBranchService transBranchService) {
		this.transBranchService = transBranchService;
	}

	@Override
	public void run() {
		重写Runnable接口的run()方法,这里写我们任务要做的功能逻辑
	}
}

因为Runnable是框架内置的服务类,它的实现类不支持动态注入,所以要使用业务层的service类需要通过传参的方式传进来,那么我们就写一个构造器RunnableImpl(TransBranchService transBranchService),以方便调用

4.在方法中实现线程池使用
在方法内部通过实例Runnable对象,调用Runnable的实现类

Runnable task = new OverBankRunnableImpl(seqNo,bizNo,constantThreadPool,overBank.getREQ_DATE(),transBranchService,surl);
				constantThreadPool.getPool().submit(task);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值