一:前言
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();这个方法会使得主线程暂停,直到拿到异步线程的处理结果。