Java实现监控多个线程状态的简单实例

实例如下:

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实现监控多个线程状态的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java 使用线程监控文件目录变化的实现方法

    java 使用线程监控文件目录变化的实现方法 由于某种特殊的需求.弄了个使用线程监控文件目录变化的 代码基本如下.其中减去一些复杂的操作.只留下基本代码: package com.file; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public

  • Java实现监控多个线程状态的简单实例

    实例如下: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.Executors; /** * 测试监控类 * * @author * */ public class WatchThread { /** * 测试函数 * * @throws InterruptedException */ public void testThre

  • Java利用Zxing生成二维码的简单实例

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下. 1.2 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. import com.google.zxing.common.BitMatrix; i

  • Java与C++实现相同的MD5加密算法简单实例

    1.Java版 package com.lyz.utils.common; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; /** * MD5加密 * @author liuyazhuang */ public class MD5Hash { public static String md5

  • java读取文件和写入文件的方式(简单实例)

    Java代码 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读

  • Python实现线程状态监测简单示例

    本文实例讲述了Python实现线程状态监测.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- from threading import Thread import time def func1(): time.sleep(10) t1=Thread(target=func1) print('t1:',t1.isAlive()) t1.start() print('t1:',t1.isAlive()) t1.join(5) print('t1:',t1.isAliv

  • Java使用阻塞队列控制线程通信的方法实例详解

    本文实例讲述了Java使用阻塞队列控制线程通信的方法.分享给大家供大家参考,具体如下: 一 点睛 阻塞队列主要用在生产者/消费者的场景,下面这幅图展示了一个线程生产.一个线程消费的场景: 负责生产的线程不断的制造新对象并插入到阻塞队列中,直到达到这个队列的上限值.队列达到上限值之后生产线程将会被阻塞,直到消费的线程对这个队列进行消费.同理,负责消费的线程不断的从队列中消费对象,直到这个队列为空,当队列为空时,消费线程将会被阻塞,除非队列中有新的对象被插入. BlockingQueue的核心方法:

  • java 基础教程之多线程详解及简单实例

    java 多线程详解 在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信. 线程是操作系统运行的基本单位,它被封装在进程中,一个进程可以包含多个线程.即使我们不手动创造线程,进程也会有一个默认的线程在运行. 对于JVM来说,当我们编写一个单线程的程序去运行时,JVM中也是有至少两个线程在运行,一个是我们创建的程序,一个是垃圾回收. 线程基本信息 我们可以通过Thread.currentThread()方法

  • Java线程状态转换关系实例解析

    状态1:新建一个线程并且开启start()方法,使Java线程和操作系统线程联系起来: 状态2:Running--Waiting :调用wait方法 synchronized(lock){ lock.wait(); //进入waiting状态,释放锁 } synchronized(lock){ lock.notifyAll(); //,唤醒所有线程,使所有在waiting状态的线程进入blocked状态,进入entry List队列和其他线程一起竞争锁 } 状态3Running--Waiting

  • JAVA得到数组中最大值和最小值的简单实例

    今天本文与大家分享如何得到数组中的最大值和最小值的实例.很适合Java初学者复习数组的基本用法与流程控制语句的使用.具体如下: 这个程序主要是求得数组中的最大值和最小值 public class TestJava4_3 { public static void main(String args[]) { int i,min,max; int A[]={74,48,30,17,62}; // 声明整数数组A,并赋初值 min=max=A[0]; System.out.print("数组A的元素包括

  • Java基础之extends用法详解及简单实例

     Java extends用法详解 概要: 理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 class Animal{ void eat(){ System.out.println("Animal eat"); } void sleep(){ System.out.println("Animal sleep"); } vo

随机推荐