Future和FutureTask区别

来源:互联网 发布:p站软件 编辑:程序博客网 时间:2024/06/06 03:17
FUTURE EXAMPLE===========package com.futuretest;import java.util.concurrent.*;/** * Created by jc6a on 2016/1/29. */public class Test {    public static void main(String[] args)    {        ExecutorService executorService = Executors.newCachedThreadPool();        Task task = new Task();        Future<Integer> result = executorService.submit(task);        executorService.shutdown();        try        {            Thread.sleep(1000);        }        catch(Exception e)        {            e.printStackTrace();        }        System.out.println("主线程在执行任务");        try {            System.out.println("task的运行结果:"+result.get());        } catch (InterruptedException e) {            e.printStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        }        System.out.println("所有任务执行完毕");    }}class Task implements Callable<Integer>{    public Integer call() throws Exception {        System.out.println();        Thread.sleep(3000);        int sum = 0;        for(int i=0;i<100;i++)        {            sum +=i;        }        return sum;    }}


FUTURETASK EXAMPLE

=====================

package com.futuretest;import java.util.concurrent.*;/** * Created by jc6a on 2016/1/29. */public class Test1 {    public static void main(String[] args)    {        ExecutorService executorService = Executors.newCachedThreadPool();        Task1 task = new Task1();        FutureTask<Integer> futureTask = new FutureTask<Integer>(task);//        executorService.submit(futureTask);//        executorService.shutdown();        System.out.println(futureTask.isDone());        System.out.println(futureTask.isCancelled());        Thread thread = new Thread(futureTask);        thread.start();        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("主线程在执行任务");        try {            System.out.println("task运行结果:"+futureTask.get(1000,TimeUnit.MILLISECONDS));        } catch (InterruptedException e) {            e.printStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        } catch (TimeoutException e) {            e.printStackTrace();        }        System.out.println(futureTask.isDone());    }}class Task1 implements Callable<Integer>{    public Integer call() throws Exception {        System.out.println("子线程在进行计算");        Thread.sleep(500);        int sum = 0;        for(int i=0;i<100;i++)        {            sum +=i;        }        return sum;    }}



0 0
原创粉丝点击