Java线程池在运行后的结果反查

开发 后端
Java线程池在运行的过程中需要注意结果的反查,其实我们需要不断的学习以应付不断变化的语言环境。下面的代码希望大家有所收获。

Java线程池需要不断的学习,在学习的时候我们就要注意不少的问题。下面我们就来看看具体的语言运作环境如何才能满足Java线程池相关程序的运行。希望大家有所收获。

无论是接收Runnable型参数,还是接收Callable型参数的submit()方法,都会返回一个Future(也是一个接口)类型的对象。该对象中包含了任务的执行情况以及结果。调用Future的boolean isDone()方法可以获知任务是否执行完毕;调用Object get()方法可以获得任务执行后的返回结果,如果此时任务还没有执行完,get()方法会保持等待,直到相应的任务执行完毕后,才会将结果返回。

我们用下面的一个例子来演示Java5.0中Java线程池的使用:

Java代码

  1. import java.util.concurrent.*;   
  2. public class ExecutorTest {   
  3. public static void main(String[] args) throws 
    InterruptedException,   
  4. ExecutionException {   
  5. ExecutorService es = Executors.newSingleThreadExecutor();   
  6. Future fr = es.submit(new RunnableTest());// 提交任务   
  7. Future fc = es.submit(new CallableTest());// 提交任务   
  8. // 取得返回值并输出   
  9. System.out.println((String) fc.get());   
  10. // 检查任务是否执行完毕   
  11. if (fr.isDone()) {   
  12. System.out.println("执行完毕-RunnableTest.run()");   
  13. } else {   
  14. System.out.println("未执行完-RunnableTest.run()");   
  15. }   
  16. // 检查任务是否执行完毕   
  17. if (fc.isDone()) {   
  18. System.out.println("执行完毕-CallableTest.run()");   
  19. } else {   
  20. System.out.println("未执行完-CallableTest.run()");   
  21. }   
  22. // 停止线程池服务   
  23. es.shutdown();   
  24. }   
  25. }   
  26. class RunnableTest implements Runnable {   
  27. public void run() {   
  28. System.out.println("已经执行-RunnableTest.run()");   
  29. }   
  30. }   
  31. class CallableTest implements Callable {   
  32. public Object call() {   
  33. System.out.println("已经执行-CallableTest.call()");   
  34. return "返回值-CallableTest.call()";   
  35. }   
  36. }   
  37. import java.util.concurrent.*;  
  38. public class ExecutorTest {  
  39. public static void main(String[] args) throws 
    InterruptedException,  
  40. ExecutionException {  
  41. ExecutorService es = Executors.newSingleThreadExecutor();  
  42. Future fr = es.submit(new RunnableTest());// 提交任务  
  43. Future fc = es.submit(new CallableTest());// 提交任务  
  44. // 取得返回值并输出  
  45. System.out.println((String) fc.get());  
  46. // 检查任务是否执行完毕  
  47. if (fr.isDone()) {  
  48. System.out.println("执行完毕-RunnableTest.run()");  
  49. } else {  
  50. System.out.println("未执行完-RunnableTest.run()");  
  51. }  
  52. // 检查任务是否执行完毕  
  53. if (fc.isDone()) {  
  54. System.out.println("执行完毕-CallableTest.run()");  
  55. } else {  
  56. System.out.println("未执行完-CallableTest.run()");  
  57. }  
  58. // 停止线程池服务  
  59. es.shutdown();  
  60. }  
  61. }  
  62. class RunnableTest implements Runnable {  
  63. public void run() {  
  64. System.out.println("已经执行-RunnableTest.run()");  
  65. }  
  66. }  
  67. class CallableTest implements Callable {  
  68. public Object call() {  
  69. System.out.println("已经执行-CallableTest.call()");  
  70. return "返回值-CallableTest.call()";  
  71. }  

 

运行结果:

已经执行-RunnableTest.run()
已经执行-CallableTest.call()
返回值-CallableTest.call()
执行完毕-RunnableTest.run()
执行完毕-CallableTest.run()

使用完Java线程池后,需要调用它的shutdown()方法停止服务,否则其中的所有线程都会保持运行,程序不会退出。
 

【编辑推荐】

  1. 两种JavaScript解析引擎性能对比谈
  2. Python实现Java操作的“窍门”
  3. 深入理解Java的内省与反射
  4. Python编程语言在Java中的使用效果
  5. Python编程语言与Java的技术比较
责任编辑:张浩 来源: 互联网
相关推荐

2012-05-15 02:18:31

Java线程池

2021-09-11 15:26:23

Java多线程线程池

2015-08-20 09:17:36

Java线程池

2017-12-07 08:56:21

2023-11-22 08:37:40

Java线程池

2024-01-12 10:05:32

线程池代码

2017-05-04 16:33:58

Java线程池实践

2021-11-15 10:50:52

Java线程池代码

2012-02-29 13:26:20

Java

2020-09-04 10:29:47

Java线程池并发

2010-03-15 16:56:16

Java线程池

2010-03-18 15:15:08

Java线程池

2024-10-21 18:12:14

2019-09-09 09:50:27

设置Java线程池

2021-07-16 11:35:20

Java线程池代码

2020-11-25 11:33:47

Java线程技术

2012-02-01 11:20:23

Java线程

2013-05-23 15:59:00

线程池

2013-06-08 13:07:23

Java线程池调度器

2010-03-15 16:12:34

Python编程语言
点赞
收藏

51CTO技术栈公众号