java future模式举例
程序员文章站
2022-04-03 14:07:58
...
java future模式举例
——我一直不太信任自己的记忆力,所以我把它们都写下来
Future模式在java中简单使用
直接模拟场景,然后看实例,一直以来喜欢这种直接的方式:有两个比较耗时的计算过程,一个耗时5秒,一个耗时2秒,那我们怎么在5秒时得到计算结果?
先是普通的做法
public class ExeCutorTest { /** * @param args */ public static void main(String[] args) { //计时开始 Long beg = new Date().getTime(); System.out.println("结果"+(calcA()+calcB())); //执行完成后话费的时间 System.out.println("花费时间"+(new Date().getTime()-beg)); } //耗时操作A需要2000毫秒 public static int calcA(){ int count = 50; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } //耗时操作B需要5000毫秒 public static int calcB(){ int count = 100; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } }
运行控制台输出结果如下,如我们所料是7000毫秒也就是7秒;
结果150
花费时间7000
下面是使用Future模式的改良版
public class ExeCutorTest { /** * @param args */ public static void main(String[] args) { // 计时开始 Long beg = new Date().getTime(); FutureTask<Integer> task = new FutureTask<Integer>( new Callable<Integer>() { @Override public Integer call() throws Exception { return calcB(); } }); Thread t = new Thread(task); t.start(); try { System.out.println("结果" + (calcA() + task.get())); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } // 执行完成后话费的时间 System.out.println("花费时间" + (new Date().getTime() - beg)); } // 耗时操作A需要2000毫秒 public static int calcA() { int count = 50; try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } // 耗时操作B需要5000毫秒 public static int calcB() { int count = 100; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return count; } }
控制台打印输出的结果:
结果150
花费时间5005
版权声明:本文为博主原创文章,未经博主允许不得转载。
上一篇: 明清军制有什么不同 为什么明朝军队军费开支远大于清朝
下一篇: 你骗我