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

如上面所说

第1个回答  2022-10-13

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

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

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

  Java代码

   import ncurrent *;

   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 ncurrent *;

   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() ;

   }

   }

  运行结果

  已经执行 RunnableTest run()

  已经执行 CallableTest call()

  返回值 CallableTest call()

  执行完毕 RunnableTest run()

  执行完毕 CallableTest run()

lishixinzhi/Article/program/Java/gj/201311/27283

Java线程池在运行后的结果反查
运行结果 已经执行 RunnableTest run()

java 如何获得线程池中正在执行的线程数?
java中线程池的监控可以检测到正在执行的线程数。通过线程池提供的参数进行监控。线程池里有一些属性在监控线程池的时候可以使用 taskCount:线程池需要执行的任务数量。completedTaskCount:线程池在运行过程中已完成的任务数量。小于或等于taskCount。largestPoolSize:线程池曾经创建过的最大线程数量。通过这个...

Java两个线程分别返回两个ResultSet,如何分多次读取两个ResultSet的结 ...
创建实体 ResultBean private RsultSet resultSet;private List<Bean> resultList;包含方法:方法1:public List<Bean> getResultList();每次将resultList清空后使用resultSet.next读取Bean再添加,判断是否遍历完毕,遍历完毕调用closeResultSet方法并返回null 方法2:public void closeResultSet();关闭ResultSet...

java线程池ExecutorService,里面有多少空余线程,怎么看
要检查线程池中有多少空闲线程,可以使用getActiveCount()方法。这个方法返回当前正在运行或等待执行任务的线程数量。如果你的线程池配置为固定大小100,且使用getActiveCount()得到的结果为80,那么就意味着有20个线程是空闲的,因为线程池的最大线程数减去活动线程数即为空闲线程数。为了进一步理解线程池的工...

java进程占用cpu过高分析是哪些线程
此外,还可以检查线程池的配置是否合理。如果线程池大小设置不当,可能会导致过多线程竞争CPU资源,进而引发CPU占用过高的问题。适当调整线程池大小,或者优化线程任务的执行逻辑,可以有效缓解这一问题。最后,建议定期监控Java应用的性能指标,如CPU使用率、内存使用情况等,以便及时发现并解决问题。通过持续的...

Java线程池动态配置(nacos)+实时监控 落地解决
配置Nacos上的线程池参数:在Nacos配置中心上,设置线程池的相关参数,如核心线程数、最大线程数、队列容量等。启动程序并查看监控:启动Java应用程序,该程序应基于HThreadPool或其他支持动态配置的线程池框架。通过监控工具或页面,实时查看线程池的运行状态,包括活跃线程数、队列使用大小等指标。模拟任务...

Java线程池详解:Future的使用和实现
在调用cancel后,无论cancel是否返回true改返回都将始终返回true。*\/ boolean isCancelled();2. FutureTask FutureTask是Future的一个具体实现,实现了RunnableFuture接口。Executor框架下的线程池通常使用FutureTask作为底层实现。在AbstractExecutorService中,所有提交的任务都会被先封装为FutureTask,然后在execute...

java线程的几种状态
当创建一个线程对象时,该线程进入新建状态。此时,线程对象已经被分配了内存,但线程还未启动,即还没有调用线程的start()方法。就绪状态(runnable):创建好线程对象并调用其start()方法后,线程进入就绪状态。此时,线程位于可运行线程池中,等待被线程调度器选中,以获取CPU的使用权。在等待期间,线程...

Java线程池动态配置(nacos)+实时监控 落地解决
通过动态修改线程池的核心线程数和最大线程数,让挂起的任务被执行。修改nacos配置后,程序执行第6个任务,再次查看监控,activeCount变为6,queueUsedSize变为0,说明挂起的任务被自动执行。在项目中引入maven,配置application.properties文件。提交任务,通过监控中心获取当前线程池的指标数据,路径如下,监控...

图解Java线程的6种状态及切换
描述:线程调用start后,进入就绪状态,位于可运行线程池中,等待获取CPU资源。一旦获得CPU资源,线程会变为运行状态。切换:获得CPU资源后,线程变为运行状态。线程因时间片用完或其他原因被调度器暂停时,会回到就绪状态。线程进入阻塞、等待或超时等待状态时,会离开就绪状态。阻塞状态 描述:当线程尝试获取...

相似回答
大家正在搜