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

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

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

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

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

Java代码

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

 

运行结果:

已经执行-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线程池

2015-08-20 09:17:36

Java线程池

2021-09-11 15:26:23

Java多线程线程池

2023-11-22 08:37:40

Java线程池

2024-01-12 10:05:32

线程池代码

2017-12-07 08:56:21

2021-11-15 10:50:52

Java线程池代码

2012-02-29 13:26:20

Java

2017-05-04 16:33:58

Java线程池实践

2020-09-04 10:29:47

Java线程池并发

2019-09-09 09:50:27

设置Java线程池

2021-07-16 11:35:20

Java线程池代码

2020-11-25 11:33:47

Java线程技术

2010-03-15 16:56:16

Java线程池

2010-03-18 15:15:08

Java线程池

2024-10-21 18:12:14

2012-02-01 11:20:23

Java线程

2013-05-23 15:59:00

线程池

2023-05-19 08:01:24

Key消费场景

2013-06-08 13:07:23

Java线程池调度器
点赞
收藏

51CTO技术栈公众号