这里主要讲一下使用的方式,有两种:
第一种:使用Callable和FutureTask接口,Thread类
/** * 使用Callable的方法的时候,需要将要执行的内容写到call()方法中 * @author bwq * @date 2019年3月10日下午4:00:50 */ public class Demo01{ public static void main(String[] args) { Call call = new Call(); FutureTask<Integer> futureTask = new FutureTask<>(call); Thread thread=new Thread(futureTask); thread.run(); int sum = 1; try { sum = futureTask.get(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(sum); } } //继承Callable对象,泛型类型为返回的数据的类型 class Call implements Callable<Integer>{ @Override public Integer call() throws Exception { int num = 0; System.out.println("这里是Call的call方法!"); return num; } }
第二种方式:使用Callable和FutureTask接口,ExecutorService接口
public class Demo02 { public static void main(String[] args) { Call call = new Call(); FutureTask<Integer> futureTask1 = new FutureTask<>(call); FutureTask<Integer> futureTask2 = new FutureTask<>(call); ExecutorService executor = Executors.newFixedThreadPool(2); executor.submit(futureTask1); executor.submit(futureTask2); try { System.out.println(futureTask1.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } //继承Callable对象,泛型类型为返回的数据的类型 class Call implements Callable<Integer>{ @Override public Integer call() throws Exception { int num = 0; System.out.println("这里是Call的call方法!"); return num; } }