`
scholers
  • 浏览: 620289 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA监控多个线程状态的一种实现

阅读更多
  场景:需要启动多线程处理事情,而在所有事情做完之后,需要修改系统状态;那么如何判断所有线程(事情)都做完了呢?这就需要判断所有当前运行的线程状态了。
下面是参考网上的一种写法,代码比较简洁和优雅。
  以下代码在JDK1.5编译通过!


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() + " 个线程");
		}
	}

}
1
0
分享到:
评论

相关推荐

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

    Java实现监控多个线程状态的简单实例 Java语言中,监控多个线程状态是一个复杂的任务,需要使用Java的并发编程机制来实现。下面,我们将通过一个简单的实例来展示如何使用Java来监控多个线程状态。 知识点1:...

    Java线程超时监控

    另外,`java.lang.Thread`类也提供了一种实现线程超时的方法,通过使用`join`方法。`join`可以等待某个线程结束,同时可以设置一个等待时限。 ```java Thread thread = new Thread(() -&gt; { // 需要监控的线程代码 ...

    java实现多线程文件传输

    10. **安全性**:在多线程环境下,文件操作需注意文件锁,避免同一时刻多个线程修改同一文件,造成数据混乱。 通过以上知识点的综合运用,我们可以构建一个高效、安全的多线程文件传输系统。实际编程中,还需要根据...

    java 监控线程

    线程是操作系统分配CPU执行时间的基本单元,一个进程可以包含多个线程。在Java中,多线程编程允许程序同时执行多个任务,提高程序的执行效率。然而,多线程也带来了同步问题,如竞态条件、死锁等,因此,对线程的...

    java多线程查询数据库

    在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....

    java多线程文件传输

    一个进程可以有多个线程。 - **Java线程实现方式**:通过实现`Runnable`接口或继承`Thread`类创建线程。推荐使用`Runnable`,因为它可以避免单继承的限制,更符合面向对象设计原则。 2. **多线程的创建与启动** -...

    基于Java的多线程网络爬虫设计与实现.txt

    多线程技术允许爬虫同时处理多个网页请求,极大提升了爬取效率和系统响应速度。 ##### 网页抓取与解析 网络爬虫的核心功能之一是网页抓取与解析。这包括: 1. **网页抓取**:通过HTTP或HTTPS协议获取目标网页的...

    java实现多线程下载

    在Java编程中,多线程下载是一种常见的优化技术,它通过将大文件分割成多个小部分,然后在不同的线程中并行下载这些部分来提高下载速度。这种技术尤其适用于网络带宽有限或者文件体积庞大的情况。下面我们将深入探讨...

    Java多线程下载器

    Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个部分并同时下载,显著提高了下载速度。在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O...

    java多线程导出excel(千万级别)优化

    Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...

    Java源码查看线程的运行状态.rar

    1. **新建**(New):当使用`new Thread()`创建了一个线程对象时,线程处于新建状态。 2. **可运行**(Runnable):调用`start()`方法后,线程进入可运行状态。此时,线程可能正在CPU上执行,也可能等待CPU资源。 ...

    java编写的一个多线程程序,模拟银行排队.zip

    BankDemo可能会使用`synchronized`关键字来锁定服务过程,防止多个线程同时访问。 3. **等待/通知模式**:在银行场景中,当服务窗口空闲时,需要唤醒等待中的下一个客户。这可以通过`wait()`, `notify()`或`...

    基于tesseract的多线程OCR服务器的JAVA实现

    3. JAVA:Java是一种广泛使用的编程语言,尤其适合开发跨平台的应用程序。在本项目中,Java被选为实现多线程OCR服务器的语言,因为它提供了丰富的多线程API,如`java.util.concurrent`包,可以方便地创建和管理并发...

    Java实现多线程下载源代码

    在Java中,线程是程序执行的最小单位,通过创建多个线程,可以实现并发执行任务。多线程下载就是利用这个特性,创建一个线程来处理每个文件的部分下载。Java提供了多种创建线程的方式,如继承Thread类或实现Runnable...

    java多线程和网络编程结合

    例如,服务器可能会创建一个`ServerSocket`,监听指定端口,当接收到客户端的`Socket`连接请求时,服务器会创建一个新的线程来处理这个连接,这样可以确保即使有多个客户端同时连接,服务器也能有效地处理每一个请求...

    idea+java多线程模拟队列实现排队叫号.zip

    在IT行业中,Java是一种广泛应用的编程语言,尤其在并发处理和多线程方面表现出色。在本项目"idea+java多线程模拟队列实现排队叫号.zip"中,我们探讨的是如何使用Java来模拟一个基于多线程的排队叫号系统。IntelliJ ...

    Java多线程下载网络图片

    1. **同步与互斥**:当多个线程同时访问同一资源(如共享的图片存储位置)时,可能会引发数据不一致的问题。Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口以及`ReentrantLock`等,确保在同一时刻只有...

    Java多线程下载

    线程是程序执行的最小单位,一个进程中可以有多个线程同时运行。在Java中,我们可以使用`Thread`类或者实现`Runnable`接口来创建线程。使用`ExecutorService`和`Future`进行线程管理可以更有效地控制线程的生命周期...

    JAVA多线程教材

    1. **Java多线程基础知识**:Java多线程允许程序同时执行多个任务,这是通过创建和管理线程实现的。Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。线程的状态包括新建、就绪、运行、阻塞和终止,...

Global site tag (gtag.js) - Google Analytics