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);
上一篇: 梁山好汉为什么会差点被方腊弄的全军覆没?原因是什么
下一篇: 位运算判断两个数是否异号