4.1.1 Future模式
来源:互联网 发布:手机定时器软件 编辑:程序博客网 时间:2024/06/05 15:01
核心思想
调用方式为异步,去除了主函数中的等待时间,主函数可去处理其他任务,如图:
代码实现
代码示意:
public static void main(String[] args){ Client client = new Client(); //立即返回,得到FutureData Data data=client.request("name"); System.out.println("请求完毕"); //用sleep代表执行其他业务逻辑 Thread.sleep(2000); //使用真实数据RealData System.out.println(data.getResult());}//Data接口public interface Data{ public String getResult();}//Client类public class Client{ public Data request(String str) { FutureData fd = new FutureData(); //RealData构造很慢,单独开线程构造 new Thread() { public void run() { RealData rd = new RealData(str); fd.setRealData(rd); } }.start(); return fd; }}//FutureData类public class FutureData implements Data{ //FutureData是对RealData的包装 protected RealData rd = null; protected boolean isReady=false; public synchronized void setRealData(RealData rd) { if(isReady) { return; } this.rd=rd; isReady=true; notifyAll(); } //会等待RealData构造完成 public synchronized String getResult() { while(!isReady) { //此类中可能有其他多线程任务,被唤醒的原因不一定是RealData构造完成,所以需要循环判断isReady是否真的构造完成 wait(); } return rd.getResult(); }}//RealData类public class RealData implements Data{ private String result=null; public RealData() { //构造数据,假设很慢 result = new String("xxxxxx"); } public String getResult() { return result; }}
JDK内置实现
想要异步执行的业务逻辑放在call()方法内
代码示意:
public class RealData implements Callable<String>{ private String para; public RealData(String para) { this.para=para; } //真实业务逻辑 @Override public String call() { //构造数据,假设很慢 return new String("xxxx"); }}public class Main{ public static void main(String[] args) { FutureTask<String> future = new FutureTask<String>(new RealData("a")); ExecutorService exe = Executors.newFixedThreadPool(1); //开启线程执行RealData的call()方法,相当于2中的client.request() exe.submit(future); System.out.println("请求完毕"); //用sleep代表执行其他业务逻辑 Thread.sleep(5000); //使用真实数据,相当于2中的data.getResult(),如果call()没有执行完,依然会等待 System.out.println(future.get()); }}
0 0
- 4.1.1 Future模式
- Future 模式
- Future 模式
- Future模式
- Future模式
- Future模式
- Future 模式
- Future 模式
- future模式
- future 模式
- future模式
- Future模式
- Future模式
- Future模式
- future模式
- Future模式
- Future模式
- Future 模式
- 技巧
- JavaVM,反射与动态代理
- is not null 并不能拦截空串
- 如何反编译apk
- xlsxwriter+图表
- 4.1.1 Future模式
- Codeforces Round #383 (Div. 2)D.Arpa's weak amphitheater and Mehrdad's valuable Hoses【并查集+分组背包】
- 汇编语言(Assembly Language)笔记
- spring事务配置方式
- 下载软件自学网视频
- BP算法的推导(注意残差的定义)
- Android之版本-更优雅的 Android 发布自动版本号方案
- Android-常用adb命令
- 批量下载图片,简易脚本