有时在执行线程中需要在线程中返回一个值;常规中我们会用Runnable接口和Thread类设置一个变量;在run()中改变变量的值,再用一个get方法取得该值,但是run何时完成是未知的;我们需要一定的机制来保证。

在在Java se5有个Callable接口;我们可以用该接口来完成该功能;

代码如:

java返回绝对值 java返回一个值_Java

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>的泛型类型一致。
测试代码如下:

java返回绝对值 java返回一个值_Java

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方法取得返回值。
通过该方法就能很好的处理线程中返回值的问题。