文章目录
菜鸟的一个学习笔记,欢迎大神 批评指正。
Java多线程相关知识【14】–设计模式–未来者模式(future)
1.问题的引入
当获取数据时,会出现获取数据的时间很长,从而占用了主程序的运行时间,然而,在获取数据后,可能下面的很多操作都与获取的内容无关,那么怎样才能解决相关的问题呢?
2.解决的方法
在出现前面介绍的情况时,我们可以使用异步实现来解决相应问题,即可以在处理完成一定的事情后,在来回调相应的结果,保证线程不被阻塞。
3.代码的实现
获取的结果
/**
* 获取的结果
* @param <T>
*/
public interface Future<T> {
T get () throws InterruptedException;
}
获取的结果的实现
/**
* 实现获取真正的结果
*
* @param <T>
*/
public class FutureAsyn<T> implements Future<T> {
private volatile boolean done = false;
private T result;
public void done(T result) {
synchronized (this) {
this.result = result;
this.done = true;
this.notifyAll();
}
}
@Override
public T get() throws InterruptedException {
synchronized (this) {
while (!done) {
this.wait();
}
}
return result;
}
}
要执行的任务
/**
* 要执行的任务
*
* @param <T>
*/
@FunctionalInterface
public interface FutureWork<T> {
T call();
}
任务的调度
/**
* 进行实际任务调度
*/
public class