浅谈Active Object模式

一:前言

Active Object模式,乍一听,好像是挺新颖的概念,其实我们平时还是会经常接触到的,它其实是一种异步编程方式,通俗的讲就是将方法的调用和方法的执行分开,放在两个不同的线程中执行,从而做到并行处理。典型的就是我们常见的线程池执行。

二:实例


执行具体的业务逻辑的类,业务逻辑处理方法就是call

@SuppressWarnings("hiding")
public class ActiveObject<String> implements Callable<String> {

    private int flag;

    public ActiveObject(int flag) {
        this.flag = flag;
    }

    /*
     * (non-Javadoc)
     * @see java.util.concurrent.Callable#call()
     */
    @SuppressWarnings("unchecked")
    public String call() throws Exception {
        return (String) ("current flag is " + this.flag);
    }

}

业务逻辑的调用者

public class TestClient {

    private static final ExecutorService pool = Executors.newFixedThreadPool(20);

    private static final Logger          log  = LoggerFactory.getLogger(TestClient.class);

    public void start() throws InterruptedException, ExecutionException {
        List<Future<String>> results = new ArrayList<Future<String>>();
        for (int i = 0; i < 10; i++) {
            results.add(pool.submit(new ActiveObject<String>(i)));
        }
        for (Future<String> fs : results) {
            log.info(fs.get());
        }
        log.info("sssssssssssssss");
    }

}

这个也是我们比较常用的方式,先调用方法,然后将任务的执行提交给线程池,让线程池分配空闲线程来执行任务,而主线程继续干自己的事情,等到需要之前业务逻辑的处理结果时,就可以调用fs.get();这个方法会使得主线程暂停,直到拿到异步线程的处理结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值