影视网站建设需要学什么,企业建账实训总结,wordpress上传doc文件,常州seo博客它们俩其实挺有意思#xff0c;在运行的时候各司其职#xff0c;Callable产生结果#xff0c;Future获取结果。
使用步骤如下#xff1a;
创建 Callable 接口的实现类#xff0c;并实现 call() 方法#xff0c;该 call() 方法将作为线程执行体#xff0c;并且有返回值…它们俩其实挺有意思在运行的时候各司其职Callable产生结果Future获取结果。
使用步骤如下
创建 Callable 接口的实现类并实现 call() 方法该 call() 方法将作为线程执行体并且有返回值创建 Callable 实现类的实例使用 FutureTask 类来包装 Callable 对象该 FutureTask 对象封装了该 Callable 对象的 call() 方法的返回值使用 FutureTask 对象作为 Thread 对象的 target 创建并启动新线程调用 FutureTask 对象的 get() 方法来获得子线程执行结束后的返回值。
接下来通过一个示例来学习这两个对象的使用
public class Test {public static void main(String[] args) {CallableThreadTest cts new CallableThreadTest();// 接收FutureTaskInteger ft new FutureTask(cts);new Thread(ft, 有返回值的线程).start();for (int i 0; i 30; i) {System.out.println( main 的循环变量i的值 i);}try {System.out.println(子线程的返回值 ft.get());} catch (Exception e) {e.printStackTrace();}}
}
class CallableThreadTest implements CallableInteger {public Integer call() throws Exception {int i 0;for (; i 30; i) {System.out.println(Thread.currentThread().getName() i);}return i;}
}运行这段程序你应该可以获取到类似如下结果每次运行的结果不一致 ... ... main 的循环变量i的值28 main 的循环变量i的值29 有返回值的线程 23 有返回值的线程 24 有返回值的线程 25 有返回值的线程 26 有返回值的线程 27 有返回值的线程 28 有返回值的线程 29 子线程的返回值30
由于输出过长省略了部分结果可以发现在最后接收到了子线程的返回值。
在实现Callable接口中此时不再是run()方法了而是call()方法此call()方法作为线程执行体同时还具有返回值
细心的你会发现这个结果是call函数的返回值怎么拿到这个返回值的呢是通过FutureTask拿到的使用ft.get()方法即可获得线程的返回值这就是一个简单的使用Callable和Future的过程了。