专业的建设机械网站制作,崂山区城市规划建设局网站,七牛 wordpress 图床,网站报价单介绍 从Java 1.5开始#xff0c;在java.util.concurrent下有了新的对象集。 该程序包具有许多不同的类#xff0c;包括线程队列。 当我用Java 1.2编程时#xff0c;我本可以使用那些#xff01; 当我开始看这些新玩具时#xff0c;我变得犹豫不决。 这是什么可调用的东西在java.util.concurrent下有了新的对象集。 该程序包具有许多不同的类包括线程队列。 当我用Java 1.2编程时我本可以使用那些 当我开始看这些新玩具时我变得犹豫不决。 这是什么可调用的东西未来是什么 事实证明未来和可赎回没有错。 实际上它们是我在Java生涯中一直期望的。 可调用和可运行之间的区别 可调用是Runnable希望成为的。 Callable的唯一方法是“ T call”。 使它如此整洁的原因是它返回了一些东西。 这是必须为任务的答案创建吸气剂的步骤。 虽然这很酷但仍需要一种获取返回值的方法。 未来在这里 当Callable完成时Future有一种获取价值的方法。 该函数是get或get长超时TimeUnit单位。 这等效于调用thread.join;。 同时运行runnable.getValue。 例 我创建了一个名为CounterCallable的类。 它所做的只是从变量开始到变量结束加数字。 可赎回 package org.mathison.futurecallable;import java.util.concurrent.Callable;/**** author Daryl*/
public class CounterCallable implements Callable {private long start;private long end;public CounterCallable(long start, long end) {this.start start;this.end end;}Overridepublic SumTimeAnswer call() throws Exception {long sum 0;long startTime System.currentTimeMillis();for(long i start; i end; i){sum i;}long endTime System.currentTimeMillis();return new SumTimeAnswer(sum, endTime - startTime);}
}SumTimeAnswer SumTimeAnswer类实际上是一个简单的getter类它保存执行操作所需的时间总和。 package org.mathison.futurecallable;/**** author Daryl*/
public class SumTimeAnswer {private long timeToFinish;private long sum;public SumTimeAnswer(long sum, long timeToFinish) {this.sum sum;this.timeToFinish timeToFinish;}public long getTimeToFinish() {return timeToFinish;}public long getSum() {return sum;}
}应用程式 应用程序只是将所有内容汇集在一起的主要课程 package org.mathison.futurecallable;import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;/*** Hello world!**/
public class App
{public static final long BEGIN 0;public static final long END 100000;public static void main( String[] args ){FutureTask task new FutureTask(new CounterCallable(BEGIN, END));FutureTask firstHalf new FutureTask(new CounterCallable(BEGIN, END/2));FutureTask secondHalf new FutureTask(new CounterCallable(END/2 1, END));ExecutorService pool Executors.newSingleThreadExecutor();pool.submit(task);pool.submit(firstHalf);pool.submit(secondHalf);try {SumTimeAnswer taskAnswer task.get();System.out.println(just one thread Time: taskAnswer.getTimeToFinish() Total: taskAnswer.getSum());SumTimeAnswer taskFirstAnswer firstHalf.get();SumTimeAnswer taskSecondAnswer secondHalf.get();long totalTime taskFirstAnswer.getTimeToFinish() taskSecondAnswer.getTimeToFinish();long totalSum taskFirstAnswer.getSum() taskSecondAnswer.getSum();System.out.println(Two thread time: totalTime Total: totalSum);} catch(CancellationException | InterruptedException | ExecutionException e) {e.printStackTrace();}pool.shutdown();}
}结论 在本文中使用Callable和FutureTask类来演示如何使用java.util.concurrent包。 翻译自: https://www.javacodegeeks.com/2014/10/how-to-use-callable-and-futuretask.html