您的位置:首页 > 编程语言 > Java开发

Future和FutureTask区别

2016-02-01 16:14 423 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java