精华内容
下载资源
问答
  • 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、...如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动...

    之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、线程池核心类、线程池工作流程、线程池分类、拒绝策略、及如何提交与关闭线程池等。

    但在实际开发过程中,在线程池使用过程中可能会遇到各方面的故障,如线程池阻塞,无法提交新任务等。

    如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执行完成的线程数、总线程数等。

    总线程数 = 排队线程数 + 活动线程数 + 执行完成的线程数。

    下面给出一个线程池使用示例,及教你获取线程池状态。

    private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, TimeUnit.MILLISECONDS,

    new LinkedBlockingQueue(100000));

    public static void main(String[] args) throws Exception {

    for (int i = 0; i < 100000; i++) {

    es.execute(() -> {

    System.out.print(1);

    try {

    Thread.sleep(1000);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    });

    }

    ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es);

    while (true) {

    System.out.println();

    int queueSize = tpe.getQueue().size();

    System.out.println("当前排队线程数:" + queueSize);

    int activeCount = tpe.getActiveCount();

    System.out.println("当前活动线程数:" + activeCount);

    long completedTaskCount = tpe.getCompletedTaskCount();

    System.out.println("执行完成线程数:" + completedTaskCount);

    long taskCount = tpe.getTaskCount();

    System.out.println("总线程数:" + taskCount);

    Thread.sleep(3000);

    }

    }

    线程池提交了 100000 个任务,但同时只有 50 个线程在执行工作,我们每陋 3 秒来获取当前线程池的运行状态。

    第一次程序输出:

    当前排队线程数:99950

    当前活动线程数:50

    执行完成线程数:0

    总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000

    第二次程序输出:

    当前排队线程数:99800

    当前活动线程数:50

    执行完成线程数:150

    总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000

    活动线程数和总线程数是不变的,排队中的线程数和执行完成的线程数不断在变化,直到所有任务执行完毕,最后输出:

    当前排队线程数:0

    当前活动线程数:0

    执行完成线程数:100000

    总线程数(排队线程数 + 活动线程数 + 执行完成线程数):100000

    这样,你了解了这些 API 的使用方法,你想监控线程池的状态就非常方便了。

    展开全文
  • 场景:需要启动多线程处理事情,...这就需要判断所有当前运行的线程状态了。import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;import java.util.concurrent.Executors;/*** 测试监...

    场景:需要启动多线程处理事情,而在所有事情做完之后,需要修改系统状态;那么如何判断所有线程(事情)都做完了呢?这就需要判断所有当前运行的线程状态了。

    import java.util.concurrent.CountDownLatch;

    import java.util.concurrent.Executor;

    import java.util.concurrent.Executors;

    /**

    * 测试监控类

    *

    * @author

    *

    */

    public class WatchThread {

    /**

    * 测试函数

    *

    * @throws InterruptedException

    */

    public void testThread() throws InterruptedException {

    int threadNum = 10;

    // 初始化countDown

    CountDownLatch threadSignal = new CountDownLatch(threadNum);

    // 创建固定长度的线程池

    Executor executor = Executors.newFixedThreadPool(threadNum);

    for (int i = 0; i < threadNum; i++) { // 开threadNum个线程

    Runnable task = new TestThread(threadSignal);

    // 执行

    executor.execute(task);

    }

    threadSignal.await(); // 等待所有子线程执行完

    // do work

    System.out.println(Thread.currentThread().getName() + "+++++++结束.");

    }

    /**

    * 测试函数

    */

    public static void main(String[] args) throws InterruptedException {

    WatchThread test = new WatchThread();

    test.testThread();

    }

    /**

    *

    * @author jill

    *

    */

    private class TestThread implements Runnable {

    private CountDownLatch threadsSignal;

    public TestThread(CountDownLatch threadsSignal) {

    this.threadsSignal = threadsSignal;

    }

    public void run() {

    System.out.println(Thread.currentThread().getName() + "开始...");

    // do shomething

    System.out.println("开始了线程::::" + threadsSignal.getCount());

    // 线程结束时计数器减1

    threadsSignal.countDown();

    System.out.println(Thread.currentThread().getName() + "结束. 还有"

    + threadsSignal.getCount() + " 个线程");

    }

    }

    }

    展开全文
  • 实例如下:import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;import java.util..../*** 测试监控类** @author**/public class WatchThread {/*** 测试函数** @throws Interrup...

    实例如下:

    import java.util.concurrent.CountDownLatch;

    import java.util.concurrent.Executor;

    import java.util.concurrent.Executors;

    /**

    * 测试监控类

    *

    * @author

    *

    */

    public class WatchThread {

    /**

    * 测试函数

    *

    * @throws InterruptedException

    */

    public void testThread() throws InterruptedException {

    int threadNum = 10;

    // 初始化countDown

    CountDownLatch threadSignal = new CountDownLatch(threadNum);

    // 创建固定长度的线程池

    Executor executor = Executors.newFixedThreadPool(threadNum);

    for (int i = 0; i < threadNum; i++) { // 开threadNum个线程

    Runnable task = new TestThread(threadSignal);

    // 执行

    executor.execute(task);

    }

    threadSignal.await(); // 等待所有子线程执行完

    // do work

    System.out.println(Thread.currentThread().getName() + "+++++++结束.");

    }

    /**

    * 测试函数

    */

    public static void main(String[] args) throws InterruptedException {

    WatchThread test = new WatchThread();

    test.testThread();

    }

    /**

    *

    * @author jill

    *

    */

    private class TestThread implements Runnable {

    private CountDownLatch threadsSignal;

    public TestThread(CountDownLatch threadsSignal) {

    this.threadsSignal = threadsSignal;

    }

    public void run() {

    System.out.println(Thread.currentThread().getName() + "开始...");

    // do shomething

    System.out.println("开始了线程::::" + threadsSignal.getCount());

    // 线程结束时计数器减1

    threadsSignal.countDown(); //这句代码 建议放在 finally里执行

    System.out.println(Thread.currentThread().getName() + "结束. 还有"

    + threadsSignal.getCount() + " 个线程");

    }

    }

    }

    以上这篇Java实现监控多个线程状态的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

    时间: 2017-03-02

    展开全文
  • 如何监控线程状态?(How to monitor a thread's status?)问题描述 (Problem Description)如何监控线程状态?解决方案 (Solution)下面的示例演示如何通过扩展Thread类和使用currentThread.getName()方法来监视...

    如何监控线程的状态?(How to monitor a thread's status?)

    问题描述 (Problem Description)

    如何监控线程的状态?

    解决方案 (Solution)

    下面的示例演示如何通过扩展Thread类和使用currentThread.getName()方法来监视线程的状态。class MyThread extends Thread {

    boolean waiting = true;

    boolean ready = false;

    MyThread() {

    }

    public void run() {

    String thrdName = Thread.currentThread().getName();

    System.out.println(thrdName + " starting.");

    while(waiting) System.out.println("waiting:"+waiting);

    System.out.println("waiting...");

    startWait();

    try {

    Thread.sleep(1000);

    } catch(Exception exc) {

    System.out.println(thrdName + " interrupted.");

    }

    System.out.println(thrdName + " terminating.");

    }

    synchronized void startWait() {

    try {

    while(!ready) wait();

    } catch(InterruptedException exc) {

    System.out.println("wait() interrupted");

    }

    }

    synchronized void notice() {

    ready = true;

    notify();

    }

    }

    public class new_class {

    public static void main(String args[]) throws Exception {

    MyThread thrd = new MyThread();

    thrd.setName("MyThread #1");

    showThreadStatus(thrd);

    thrd.start();

    Thread.sleep(50);

    showThreadStatus(thrd);

    thrd.waiting = false;

    Thread.sleep(50);

    showThreadStatus(thrd);

    thrd.notice();

    Thread.sleep(50);

    showThreadStatus(thrd);

    while(thrd.isAlive())

    System.out.println("alive");

    showThreadStatus(thrd);

    }

    static void showThreadStatus(Thread thrd) {

    System.out.println(thrd.getName()+" Alive:="+thrd.isAlive()+" State:=" + thrd.getState() );

    }

    }

    结果 (Result)

    上面的代码示例将产生以下结果。main Alive=true State:=running

    展开全文
  • Java实现监控多个线程状态的简单实例发布于 2020-5-26|复制链接下面小妖就为大家带来一篇Java实现监控多个线程状态的简单实例。小妖觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小妖过来看看吧实例...
  • 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、...如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动...
  • 线程的五种状态* 新建:new* 运行:runnable* 等待:waitting(无限期等待),timed waitting(限期等待)* 阻塞:blocked* 结束:terminated线程转换关系线程的两种监控方法一,jvisualvm,图形界面的方式 监控之前先对...
  • 如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执行完成的线程数、总线程数等。总线程数 = 排队线程数 + ...
  • 下面小编就为大家带来一篇Java实现监控多个线程状态的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、...如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动...
  • 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、...如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动...
  • 之前写过一篇 Java 线程池的使用介绍文章《线程池全面解析》,全面介绍了什么是线程池、...如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动...
  • “昨天晚上很冷让我遇见你,你站在德克士门口等你男朋友,我站在你对面街上看了你那么久,你男朋友为何要对...”——金玟岐《岁月神偷》Java线程状态线程的五种状态* 新建:new(时间很短)* 运行:runnable* 等待:w...
  • WAITING(限期等待)6 TERMINATED(结束)二、Java 线程状态转换图三、VisualVM 线程监控线程状态Java 线程状态对应关系1 运行2 休眠3 等待4 驻留5 监视参考文章 一、Java 线程状态 1 NEW(新建) java.lang....
  • 主要,监控线程的状态,判断出线程停顿的原因。例如,死锁,死循环,多个线程等待等等。线程的状态包括NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED。1、线程状态跟踪(1) jpsjps命令,...
  • /*** 观察线程的生命周期 主题*/public abstract class ObserverRunnable implements Runnable {//被观察对象final ThreadLifeCycleListener threadLifeCycleListener;public ObserverRunnabl...
  • 了解线程的状态有助于程序员监控线程对象所处的情况,比如那些线程从未启动;那些线程正在执行,哪些线程正在阻塞,哪些线程正在等待;哪些线程已经销毁了,等等。这些是线程生命周期相关的信息。 (1)NEW状态是...
  • Java实现监控多个线程状态的实现

    千次阅读 2016-11-26 17:18:16
    场景:需要启动多线程处理事情,而在所有事情做完之后,需要修改系统状态;那么如何判断所有线程(事情...这就需要判断所有当前运行的线程状态了。   import java.util.concurrent.CountDownLatch; import java.util.
  • 线程的五种状态* 新建:new* 运行:runnable* 等待:waitting(无限期等待),timed waitting(限期等待)* 阻塞:blocked* 结束:terminated线程的两种监控方法一,jvisualvm,图形界面的方式监控之前先对jvm加监控参数...
  • // 创建一个线程池,线程数corePoolSize为5Executor executor =Executors.newScheduledThreadPool(5);// 把线程Runnable放到线程池运行executor.execute(new Runnalbe(){@Overridepublic void run() {System.out....
  • 2. 可运行(RUNNABLE):表示处于改状态线程可以被JVM的线程调度器(scheduler)进行调度而使之处于运行中(RUNNING)状态。 阻塞状态(BLOCKED):一个线程发起一个阻塞式I/O操作后,或者试图去获得一个
  • java 线程监控

    2019-06-10 23:41:00
    线程的五种状态 * 新建:new * 运行:runnable * 等待:waitting(无限期等待),timed waitting(限期等待) * 阻塞:blocked * 结束:terminated  线程转换关系 线程的两种监控方法 一,jvisualvm,...
  • (1)线程状态的简要说明 (2)线程状态转换过程中常用的方法 (3)停止线程 (4)线程休眠 (5)线程礼让(yield) (6)线程强制执行(join) (7)线程状态观测 (8)线程的优先级 (9)守护(daemon)线程 线程...
  • 实例如下:import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;import java.util..../*** 测试监控类** @author**/public class WatchThread {/*** 测试函数** @throws Interrup...
  • import java.util.concurrent.CountDownLatch;import java.util.concurrent.Executor;import java.util..../*** 测试监控类** @author**/public class WatchThread {/*** 测试函数** @throws InterruptedEx...
  • 根据您的需求,可以采用多种方法.如果您只想等待所有线程完成(即您关心的是在继续操作之前完成所有操作),则可以使用Thread.join():try {... handle error ...}如果希望对线程状态进行更细粒度的控制,并且希望能够随...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 926
精华内容 370
关键字:

java监控线程状态

java 订阅