上面部分,为我个人对次接口的认识。下面部分,为我找到的专业的解答。
1、继承Callable类,需要重写call()方法。[Thread和Runnable都是重写run()方法]
2、Callable类的call()方法有出参。而run()方法没有出参。
3、call()方法可以抛出异常,而run()方法不可以。
4、运行Callable任务可拿到一个Future对象, Future表示异步计算的结果。
5、它提供了一系列方法:run()、cancel()、get()、isCanceled()、isDone()。
简单来说。
实现Callable接口,重写call方法。通过FeatureTast类将callable对象包装,通过new Thread().start()方法将其执行。Callable可以返回装载有计算结果的Future对象。
Callable内部维护了一个单向的线程列表,当个业务出现异常或执行完成时,会讲单项列表中的该线程对象移出。
get方法是通过不停的for循环,来获取当前线程的一个状态。当状态为完成的时候,就将数据返回。
state状态为volitile修饰。保证线程间可见。