java线程异步调用

本文主要讲解生产环境中遇到的异步加载数据问题以及相应的解决思路。

系统登录的时候,需要根据用户ID生成一些和当前用户有关的数据放在缓存里,如果不考虑异步调用,则整个登录过程可能需要近8S的时间,这肯定是无法接受的。因而需要在登录的时候,将这些与登录无关的数据操作提取出来,并放在异步进程中实现。

在Java程序中,如果想实现异步调用方法的功能,需要通过线程方式实现,即实现java.lang.Runnable接口或者继承java.lang.Thread类,这里选择使用实现Runnable接口。考虑到是生产环境,还需要使用到ThreadPoolExecutor线程池。下面直接看代码示例:
一、定义线程池实例服务

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;
    }
}

二、任务处理实现

public class MyTask implements Runnable {
    @Override
    public void run() {
        // 具体业务处理
   		......
    }
}

三、放入线程池中执行

  public void testExecutorPool() {
        ThreadPoolExecutor executor = ThreadPoolManager.getInstance();
        executor.execute(new Mytask());
    }

PS: ThreadPoolExecutor+Runnable实现方式是无返回结果的,如果需要拿到返回结果要使用ThreadPoolExecutor+Callable方式。


------------本文结束感谢您的阅读------------
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值