current.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureMain2 {
public static void main(String[] args) throws InterruptedException,
ExecutionException {
ExecutorService executor = Executors.newFixedThreadPool(1);
// 执行FutureTask,相当于上例中的 client.request("a") 发送请求
// 在这里开启线程进行RealData的call()执行
Future<String> future = executor.submit(new RealData("a"));
System.out.println("请求完毕");
try {
// 这里依然可以做额外的数据操作,这里使用sleep代替其他业务逻辑的处理
Thread.sleep(2000);
} catch (InterruptedException e) {
}
// 相当于data.getResult (),取得call()方法的返回值
// 如果此时call()方法没有执行完成,则依然会等待
System.out.println("数据 = " + future.get());
}
}
由于Callable是有返回值的,可以直接返回future对象。
5. 生产者消费者
生产者-消费者模式是一个经典的多线程设计模式。它为多线程间的协作提供了良好的解决方案。 在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程。生产者线 程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务。生产者和消费者之间则通 过共享内存缓冲区进行通信。
以前写过一篇用Java来实现生产者消费者的多种方法,这里就不多阐述了。
本系列: