线程 Callable FutureTask 入门

Callable和Runnable的区别如下:

1)Callable定义的方法是call,而Runnable定义的方法是run.

2)Callable的call方法可以有返回值,而Runnable的run方法不能有返回值

3)Callable的call方法可抛出异常,而Runnable的run方法不能抛出异常

 

Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的

结果.Future的cancel方法取消任务的执行,有一个布尔参数,参数为true表示立即中断任务的执行,参数

为false表示允许正在运行的任务运行完成.Future的get方法等待计算完成,获取计算结果.

 

创建并启动有返回值的线程步骤与实现Runnable接口相似:
1.创建Callable接口的实现类,并实现call()方法
2.创建Callable实现类的实例,使用FutureTask类来包装Callable对象
3.使用FutrueTask对象作为Thread对象的target创建并启动新线程。
4.调用FutrueTask对象的get()方法来获得子线程执行结束后的返回值。

 

public class MyCallable implements Callable<String> {

	@Override
	public String call() throws Exception {
		System.out.println("Thread.sleep(3000) before");
		Thread.sleep(3000);
		System.out.println("Thread.sleep(3000) after");
		return "huangbiao";
	}

}

 

public class TestCallable {

	public static void main(String[] args) throws Exception {
		MyCallable myCallable = new MyCallable();
		FutureTask<String> fts = new FutureTask<String>(myCallable);
		//FutureTask 继承了Runnable, Future<V>, RunnableFuture接口
		new Thread(fts).start();
		System.out.println("开始启动线程");
		//get()方法:如有必要,等待计算完成,然后获取其结果。
		System.out.println("返回线程值:" + fts.get());
	}

}

 

你可能感兴趣的:(FutureTask)