public class ThreadPool {
private static ExecutorService executor;
private static int count = 0;
static {
executor = Executors.newFixedThreadPool(3);
}
public static void execute(Runnable run) {
count++;
executor.execute(run);
}
public static void close(){
executor.shutdown();
}
public static boolean isClosed(){
if(executor.isShutdown()){
return true;
}else{
return false;
}
}
public synchronized static void deleteCount(){
count--;
System.out.println(count);
}
public static int getCount(){
return count;
}
public static void out(){
System.out.println("最终的个数" + count);
}
}
public class ThreadPoolTest {
public static void main(String[] args){
for(int i = 0; i< 5; i++){
ThreadPool.execute(new Runnable(){
public void run() {
System.out.println(Thread.currentThread().getName() + "开始了");
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
Logger.getLogger(ThreadPoolTest.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(Thread.currentThread().getName() + "完成了");
ThreadPool.deleteCount();
}
});
}
while(ThreadPool.getCount() != 0){
if(ThreadPool.getCount() == 0){
break;
}
}
System.out.println("全部完成了,结束");
ThreadPool.close();
}
}
分享到:
相关推荐
- **主线程等待机制**:为了使主线程能够等待所有子线程的完成,可以在主线程中使用一个循环检查`runningThreads`列表,直到该列表为空,表明所有子线程都已完成。 **4. 高级同步机制:CountDownLatch** 另一种更...
Java 主线程等待子线程执行完毕 Java 中的多线程编程是非常重要的一部分,特别是在需要并发执行多个任务的情况下。然而,在某些情况下,我们需要等待所有子线程执行完毕后再继续执行主线程的剩余动作。这时,我们...
3. **调用`wait()`**:在适当的时候,主线程会让子线程进入等待状态,通常是当共享资源不满足某个条件时,如标志位未设置,或者计数器未达到预期值。主线程调用`wait()`后,会释放锁并进入等待池。 4. **改变共享...
要解决“让主线程等待所有子线程执行完毕”的问题,可以采用以下策略: 1. 使用`join()`方法:如提到的,直接在每个子线程的`start()`之后调用`t.join()`,会导致所有线程按顺序执行。这是因为`join()`会让主线程...
在Java多线程编程中,有时我们需要确保所有子线程执行完毕后再进行后续操作,例如在并发测试、数据聚合或资源清理等场景。本篇文章将详细介绍五种在Java中等待所有子线程执行完的方法。 ### 方法一:使用`sleep`...
本文将深入探讨如何利用`CountDownLatch`机制来确保多个子线程完成各自的任务后,再让主线程继续执行的方法。这种方法在项目开发中非常实用,尤其是在需要等待多个异步操作完成后才能进行下一步处理的情况下。 ####...
在 Java 中,实现等待所有子线程结束后再执行一段代码是非常重要的,因为它可以确保主线程等待所有子线程完成任务后再继续执行。这篇文章将详细介绍 Java 实现等待所有子线程结束后再执行一段代码的方法。 ...
在本例中,我们将创建多个子线程,并让父线程等待所有子线程退出。 接下来,我们将介绍两种实现父线程等待所有子线程退出的方法。 方法一:使用wait()和notifyAll() 在第一个示例中,我们使用了wait()和notifyAll...
当一个线程试图更新计数器时,它会暂停当前线程,直到主线程完成更新操作。这样,即使有多个线程同时尝试增加计数器,也会依次进行,保证了计数的准确性。 在实际开发中,除了Synchronize,还有其他同步原语,如...
CountDownLatch 并发编程 CountDownLatch 是一个同步的辅助类,它可以...在这个示例中,主线程发送命令启动子线程,子线程等待命令后执行任务,子线程完成任务后通知主线程,主线程等待所有子线程完成任务后恢复执行。
在多线程编程中,确保一组操作按照特定的顺序或者所有操作都完成后再进行下一步是常见的需求。Java 提供了多种工具来实现这样的同步机制,其中之一便是 `CountDownLatch` 类。`CountDownLatch` 是一个计数器,可以...
当所有工作线程都完成任务后,计数器归零,等待线程被唤醒并继续执行。 这个例子展示了 CountDownLatch 如何帮助协调多线程间的同步。等待线程通过调用 `await()` 方法阻塞自己,直到所有工作线程完成它们的 `run()...
这个特性使得`CountDownLatch`非常适合在多线程环境下,用于主线程等待一组子线程完成特定操作后再继续执行。 例如,以下场景中`CountDownLatch`的应用非常典型: 1. **多线程读取批量文件**:主线程创建多个子线...
// 主线程等待,直到计数器归零 executor.shutdown(); // 所有任务完成后关闭线程池 // 统计结果 // ... ``` 在这个例子中,主线程会等待所有子线程完成(countDown()),然后执行统计操作(await()之后的代码)...
3. 主线程等待:主线程通过`await()`方法阻塞等待,直到计数器归零。 ```java try { latch.await(); // 等待所有子任务完成 } catch (InterruptedException e) { e.printStackTrace(); } ``` **二、...
它的应用场景非常广泛,例如在处理大量数据时,可以使用多线程的方式处理,然后在主线程等待所有子线程处理完成。 CountDownLatch 的构造函数接收一个 int 类型的参数作为计数器,如果你想等待 N 个点完成,这里就...
在这个例子中,它被用来确保所有子线程完成后再继续主线程的执行。初始化时,`CountDownLatch`需要一个整型计数器参数,每当`countDown()`方法被调用一次,计数器就会减一。当计数器到达零时,任何等待这个`...
5. 主线程等待所有任务完成(`done.await()`返回),然后计算并返回总执行时间。 这个设计巧妙地利用了`CountDownLatch`来确保所有线程在开始执行时同步,并且在所有任务完成后才继续执行主线程的后续操作。这使得...
这时,可以设置一个`CountDownLatch`,初始化计数值为线程的数量,每个线程执行完后调用`countDown()`,最后主线程通过调用`await()`方法等待计数值变为0,即所有线程执行完毕,然后进行结果的汇总。 **汇总结果** ...
- **并发任务分阶段执行**:一个大型任务可以被分解成多个子任务,使用 CountDownLatch 让所有子任务完成后,再执行下一步操作。 5. **注意事项**: - `CountDownLatch` 不是线程安全的,因此计数器一旦递减到零...