欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-04 13:16:51
...

为了实现同步实时对请求方做出通讯级别的响应,并同时出发异步回调方法,引用了多线程处理。多线程使用的不多,为了方便和安全,采用了线程池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);
相关标签: 项目开发