有时在执行线程中需要在线程中返回一个值;常规中我们会用Runnable接口和Thread类设置一个变量;在run()中改变变量的值,再用一个get方法取得该值,但是run何时完成是未知的;我们需要一定的机制来保证。
在在Java se5有个Callable接口;我们可以用该接口来完成该功能;
代码如:
1. package
2.
3. import
4.
5. public class CallableThread implements
6. private
7. private int count=10;
8. public
9. this.str=str;
10. }
11. //需要实现Callable的Call方法
12. public String call() throws
13. for(int i=0;i<this.count;i++){
14. this.str+" "+i);
15. }
16. return this.str;
17. }
18. }
在call方法中执行在run()方法中一样的任务,不同的是call()有返回值。
call的返回类型应该和Callable<T>的泛型类型一致。
测试代码如下:
1. package
2.
3. import
4. import
5. import
6. import
7. import
8.
9. public class
10. public static void
11. ExecutorService exs=Executors.newCachedThreadPool();
12. new
13. for(int i=0;i<10;i++){
14. new CallableThread("String "+i)));
15. }
16.
17. for(Future<String> fs:al){
18. try
19. System.out.println(fs.get());
20. catch
21. e.printStackTrace();
22. catch
23. e.printStackTrace();
24. }
25. }
26. }
27.
28. }
submit()方法返回一个Futrue对象,可以通过调用该对象的get方法取得返回值。
通过该方法就能很好的处理线程中返回值的问题。