系统登录的时候,需要根据用户ID生成一些和当前用户有关的数据放在缓存里,如果不考虑异步调用,则整个登录过程可能需要近8S的时间,这肯定是无法接受的。因而需要在登录的时候,将这些与登录无关的数据操作提取出来,并放在异步进程中实现。
在Java程序中,如果想实现异步调用方法的功能,需要通过线程方式实现,即实现java.lang.Runnable接口或者继承java.lang.Thread类,这里选择使用实现Runnable接口。考虑到是生产环境,还需要使用到ThreadPoolExecutor线程池。下面直接看代码示例:
1.定义线程池实例服务
public class ThreadPoolManager {
public static ThreadPoolExecutor getInstance() {
if (executor == null) {
synchronized (ThreadPoolManager.class) {
if (executor == null) {
executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_TIME,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10));
}
}
}
return executor;
}
}
2.任务处理实现
public class MyTask implements Runnable {
@Override
public void run() {
// 具体业务处理
......
}
}
3.放入线程池中执行
public void testExecutorPool() {
ThreadPoolExecutor executor = ThreadPoolManager.getInstance();
executor.execute(new Mytask());
}
PS: ThreadPoolExecutor+Runnable实现方式是无返回结果的,如果需要拿到返回结果要使用ThreadPoolExecutor+Callable方式。
动力节点在线课程涵盖零基础入门,高级进阶,在职提升三大主力内容,覆盖Java从入门到就业提升的全体系学习内容。全部Java视频教程免费观看,相关学习资料免费下载!对于火爆技术,每周一定时更新!如果想了解更多相关技术,可以到动力节点在线免费观看Java多线程视频教程哦!
代码小兵64503-29 11:46
代码小兵87208-06 11:36
代码小兵34507-29 13:19