调用的的这个类就要负责接受抛出的异常现则处理异常或者继续抛出。
Callable接口实际上是属于Executor框架中的功能类,Callable接口与Runnable接口的功能类似,但提供了比Runnable更加强大的功能。
Callable可以在任务结束的时候提供一个返回值,Runnable无法提供这个功能,Callable的call方法分可以抛出异常,而Runnable的run方法不能抛出异常。
扩展资料:
注意事项:
对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝,又是从事最基础工作的劳动人民—既拥有每一个对象的所有权,又担负着每一个对象生命开始到终结的维护责任。
对于Java程序员来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄漏和内存溢出问题。
因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查错误将会成为一项异常艰难的工作。
参考资料来源:百度百科-Java
参考资料来源:百度百科-callable
线程提交执行的时候就会被调用,就像run方法一样,只不过这里在未来可以得到call执行的结果
import java.util.ArrayListimport java.util.concurrent.Callable
import java.util.concurrent.ExecutionException
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
class TaskWithResult implements Callable<String>{
private int id
private static int count =10
private final int time =count--
public TaskWithResult(int id){
this.id = id
}
@Override
public String call() throws Exception {
TimeUnit.MILLISECONDS.sleep(100)
return "Result of TaskWithResult : "+ id+", Time= "+time
}
}
public class CallableDemo {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService exec = Executors.newCachedThreadPool()
ArrayList<Future<String>> results =new ArrayList<Future<String>>()
for(int i=0i<10i++){
results.add(exec.submit(new TaskWithResult(i)))
}
for(Future<String> fs : results){
System.out.println(fs.get())
}
}
}