承诺模式(promise)
来源:互联网 发布:微信宣传软件 编辑:程序博客网 时间:2024/04/28 16:42
五、承诺模式(promise)
1、核心思想
异步编程,避免不必要的等待,增加系统的并发性。
2、也支持同步,只需将new Thread(task).start() 改成task.run()
通过凭证获取result时一定要注意不能被一直阻塞。
3、可复用代码
无
4、参考网站
public class DataSyncTask implements Runnable { @Override public void run() { Future<FTPClientUtil> ftpPromise = FTPClientUtil.newInstance(); getDataFromDB(); FTPClientUtil ftpClientUtil = null; try { System.out.println("promise get result begin"); ftpClientUtil = ftpPromise.get(); System.out.println("promise get result end"); } catch (InterruptedException e) { ; } catch (ExecutionException e) { throw new RuntimeException(e); } uploadFiles(ftpClientUtil); } private void uploadFiles(FTPClientUtil ftpClientUtil) { // TODO Auto-generated method stub ftpClientUtil.upload(); } private void getDataFromDB() { // TODO Auto-generated method stub System.out.println("get data from db begin"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("get data from db end"); }}public class FTPClientUtil { private volatile static ThreadPoolExecutor threadPoolExecutor; static { threadPoolExecutor = new ThreadPoolExecutor(1, Runtime.getRuntime().availableProcessors()*2, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10), new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r); //设置线程为“守护线程”,任务执行完成JVM会自动结束 t.setDaemon(true); return t; } }, new ThreadPoolExecutor.CallerRunsPolicy()); } //私有构造器 private FTPClientUtil(){ } public static Future<FTPClientUtil> newInstance() { Callable<FTPClientUtil> callable = new Callable<FTPClientUtil>() { @Override public FTPClientUtil call() throws Exception { FTPClientUtil self = new FTPClientUtil(); self.init(); return self; } }; final FutureTask<FTPClientUtil> task = new FutureTask<FTPClientUtil>(callable); //客户端并发量大用线程池 threadPoolExecutor.execute(task); //new Thread(task).start(); return task; } protected void init() throws Exception { // TODO Auto-generated method stub System.out.println("init future begin"); Thread.sleep(2000); System.out.println("init future end"); } public void upload() { System.out.println("upload file over"); }}public class Main { public static void main(String[] args) { Thread thread = new Thread(new DataSyncTask()); thread.start(); }}
0 0
- 承诺模式(promise)
- Promise -- 承诺
- 多线程设计模式——Promise(承诺)模式
- Promise(承诺模式) 定义承诺,取结果,执行回调,返回新承诺 (定义承诺-取结果-返回值作为新承诺结果)
- 给你一个承诺-----promise
- [C++11 并发编程] 15 承诺promise
- Promise模式
- Promise模式
- promise模式
- 给你一个承诺 - 玩转 AngularJS 的 Promise
- 给你一个承诺 - 玩转 AngularJS 的 Promise
- ionic2页面回传值,关于Typescript的Promise承诺
- 给你一个承诺,玩转angularjs的Promise
- then 方法(承诺)
- 承诺
- 承诺
- 承诺
- 承诺
- 盘点手机上没用的功能!你讨厌你手机上的什么功能?
- (UTF-8) is different from that specified in page directive(utf-8)
- adb shell 命令获取手机中的运行资源,内存,CPU,dump信息等等
- [题解]bzoj1503(NOI2004)郁闷的出纳员
- UITextField显示文字或是图片,类似的登录页面
- 承诺模式(promise)
- 从尾到头打印链表
- Visual Studio 调试器“启用编辑并继续”
- Oracle:根据身份证号码查询年龄最大的人
- grep not condition
- C++合成默认构造函数的真相
- 查找表乘法器
- 情人节c++实现的一个小程序
- IOS 上传错误itms-90161,无效的配置文件