java并发包(一)Callable接口


刚开始使用java线程的时候,使用都是Thread或Runnable接口。最近发现java并发包下,提供了一个与Runnable接口类似的Callable接口。Callable提供了比Runnable更灵活和宽松的call()。

Callable类似于Runnable接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务

Callable经常和java线程池一起启用:

//创建线程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();

//TaskCallabl是Callable的实现类
Future<String> future = threadPool.submit(new TaskCallable());

//获取线程执行结果
System.out.println(future.get());

threadPool.shutdown();
 

Callable  的使用如下

/**
* Callable类似于Runnable接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。
*
* 当将一个Callable的对象或Runnable对象
* ,传递给ExecutorService的submit方法,则该对象的call()或run()会自动在一个线程上执行, 并且会返回执行结果Future对象
*
* Callable和Runnable有以下几点不同:<br>
* (1)、Callable规定的方法是call(),而Runnable规定的方法是run().<br>
* (2)、Callable的任务执行后可返回值,而Runnable的任务是不能返回值的.<br>
* (3)、call()方法可抛出异常,而run()方法是不能抛出异常的.<br>
* (4)、运行Callable任务可拿到一个Future对象,获取线程的执行结果.<br>
*/
class TaskCallable implements Callable<String>
{

@Override
public String call() throws Exception
{
Thread.sleep(2000);
return "futureResult";
}

}
原文:https://blog.csdn.net/love_yu_xiu/article/details/84467701


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM