场景:需要启动多线程处理事情,而在所有事情做完之后,需要修改系统状态;那么如何判断所有线程(事情)都做完了呢?这就需要判断所有当前运行的线程状态了。
下面是参考网上的一种写法,代码比较简洁和优雅。
以下代码在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() + " 个线程");
}
}
}
分享到:
相关推荐
Java实现监控多个线程状态的简单实例 Java语言中,监控多个线程状态是一个复杂的任务,需要使用Java的并发编程机制来实现。下面,我们将通过一个简单的实例来展示如何使用Java来监控多个线程状态。 知识点1:...
另外,`java.lang.Thread`类也提供了一种实现线程超时的方法,通过使用`join`方法。`join`可以等待某个线程结束,同时可以设置一个等待时限。 ```java Thread thread = new Thread(() -> { // 需要监控的线程代码 ...
10. **安全性**:在多线程环境下,文件操作需注意文件锁,避免同一时刻多个线程修改同一文件,造成数据混乱。 通过以上知识点的综合运用,我们可以构建一个高效、安全的多线程文件传输系统。实际编程中,还需要根据...
线程是操作系统分配CPU执行时间的基本单元,一个进程可以包含多个线程。在Java中,多线程编程允许程序同时执行多个任务,提高程序的执行效率。然而,多线程也带来了同步问题,如竞态条件、死锁等,因此,对线程的...
在Java编程中,多线程查询数据库是一种常见的优化策略,特别是在处理大数据量或者需要并行执行多个查询时。本文将详细探讨如何利用Java的多线程技术和线程池来实现并发查询数据库,以及相关的文件`BatchDataUtil....
一个进程可以有多个线程。 - **Java线程实现方式**:通过实现`Runnable`接口或继承`Thread`类创建线程。推荐使用`Runnable`,因为它可以避免单继承的限制,更符合面向对象设计原则。 2. **多线程的创建与启动** -...
多线程技术允许爬虫同时处理多个网页请求,极大提升了爬取效率和系统响应速度。 ##### 网页抓取与解析 网络爬虫的核心功能之一是网页抓取与解析。这包括: 1. **网页抓取**:通过HTTP或HTTPS协议获取目标网页的...
在Java编程中,多线程下载是一种常见的优化技术,它通过将大文件分割成多个小部分,然后在不同的线程中并行下载这些部分来提高下载速度。这种技术尤其适用于网络带宽有限或者文件体积庞大的情况。下面我们将深入探讨...
Java多线程导出Excel是处理大数据量时的一种高效策略,尤其在面对千万级别的数据时。传统的Apache POI库在处理大规模数据时可能会遇到栈溢出(StackOverflowError)和内存溢出(OutOfMemoryError)等问题,因为这些...
Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个部分并同时下载,显著提高了下载速度。在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O...
1. **新建**(New):当使用`new Thread()`创建了一个线程对象时,线程处于新建状态。 2. **可运行**(Runnable):调用`start()`方法后,线程进入可运行状态。此时,线程可能正在CPU上执行,也可能等待CPU资源。 ...
BankDemo可能会使用`synchronized`关键字来锁定服务过程,防止多个线程同时访问。 3. **等待/通知模式**:在银行场景中,当服务窗口空闲时,需要唤醒等待中的下一个客户。这可以通过`wait()`, `notify()`或`...
3. JAVA:Java是一种广泛使用的编程语言,尤其适合开发跨平台的应用程序。在本项目中,Java被选为实现多线程OCR服务器的语言,因为它提供了丰富的多线程API,如`java.util.concurrent`包,可以方便地创建和管理并发...
在Java中,线程是程序执行的最小单位,通过创建多个线程,可以实现并发执行任务。多线程下载就是利用这个特性,创建一个线程来处理每个文件的部分下载。Java提供了多种创建线程的方式,如继承Thread类或实现Runnable...
例如,服务器可能会创建一个`ServerSocket`,监听指定端口,当接收到客户端的`Socket`连接请求时,服务器会创建一个新的线程来处理这个连接,这样可以确保即使有多个客户端同时连接,服务器也能有效地处理每一个请求...
在IT行业中,Java是一种广泛应用的编程语言,尤其在并发处理和多线程方面表现出色。在本项目"idea+java多线程模拟队列实现排队叫号.zip"中,我们探讨的是如何使用Java来模拟一个基于多线程的排队叫号系统。IntelliJ ...
1. **同步与互斥**:当多个线程同时访问同一资源(如共享的图片存储位置)时,可能会引发数据不一致的问题。Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口以及`ReentrantLock`等,确保在同一时刻只有...
线程是程序执行的最小单位,一个进程中可以有多个线程同时运行。在Java中,我们可以使用`Thread`类或者实现`Runnable`接口来创建线程。使用`ExecutorService`和`Future`进行线程管理可以更有效地控制线程的生命周期...
1. **Java多线程基础知识**:Java多线程允许程序同时执行多个任务,这是通过创建和管理线程实现的。Java提供了两种创建线程的方式:继承Thread类和实现Runnable接口。线程的状态包括新建、就绪、运行、阻塞和终止,...