原文地址:
http://blog.csdn.net/conquer0715/article/details/9000548
利用线程池newFixedThreadPool实现多线程,并通过CountDownLatch实现等待所有子线程结束后执行主线程。
//所有子线程执行完毕后执行主线程
static void threadsCall() {
ExecutorService threadPool = Executors.newFixedThreadPool(10);
int threadTaskNum = 5;
final CountDownLatch answers = new CountDownLatch(threadTaskNum);//同步计数器
for (int i = 0; i < threadTaskNum; i++) {
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println("线程" + Thread.currentThread().getName() + " 开始处理任务 ...");
Thread.sleep((long) (Math.random() * 5000));
System.out.println("线程" + Thread.currentThread().getName() + " 处理完毕,汇报结果!");
answers.countDown();
} catch (Exception e) {}
}
});
}
threadPool.shutdown();// 线程池不再接受新任务,全部任务结束后保证线程池退出运行
try {
answers.await();// 在所有子线程结束前保持阻塞
} catch (InterruptedException e) {}
System.out.println("线程" + Thread.currentThread().getName() + "已收到所有汇报结果");
}
结果:
线程pool-1-thread-1 开始处理任务 ...
线程pool-1-thread-2 开始处理任务 ...
线程pool-1-thread-3 开始处理任务 ...
线程pool-1-thread-4 开始处理任务 ...
线程pool-1-thread-5 开始处理任务 ...
线程pool-1-thread-5 处理完毕,汇报结果!
线程pool-1-thread-2 处理完毕,汇报结果!
线程pool-1-thread-3 处理完毕,汇报结果!
线程pool-1-thread-1 处理完毕,汇报结果!
线程pool-1-thread-4 处理完毕,汇报结果!
线程main已收到所有汇报结果
分享到:
相关推荐
ThreadPoolManager:Executors.newFixedThreadPool(num * 2);// 创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程 threadPool: 线程池 创建线程池,销毁线程池,添加新任务
而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,...
//Runtime的availableProcessors()方法返回当前系统的CPU的数目 //系统的CPU越多,线程池中工作线程的数目也越多 executorService= Executors.newFixedThreadPool( Runtime.getRuntime()....
newFixedThreadPool 创建一个定长线程池,可控制线程大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 newSingleThreadExecutor 创建一个单...
线程池demo:四类线程池的详细使用,newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingleThreadExecutor
一、线程池 1、什么是线程池 自定义的线程类不管是继承...public static ExecutorService newFixedThreadPool(int nThreads); 得到一个线程对象,初始化参数是要求的当前线程池中的线程数 public Future submit(Runnab
java简单线程池的实现,使用jdk的Executors.newFixedThreadPool方法来实现固定大小线程池
1.newFixedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。`` 2.newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列...
前言 这周我投递出了简历,岗位是java后端开发工程师。这周美团面试官给我进行了面试。面试过程中他问了线程池...Executors.newFixedThreadPool(100);//创建固定大小的线程池 Executors.newSingleThreadExecutor();//创
利用这种特性,可以让主线程等待子线程的结束。下面以一个模拟运动员比赛的例子加以说明。 import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent....
阿里的代码规范中提出,不推荐使用JDK提供的线程池创建方法(newCachedThreadPool、newFixedThreadPool等),因此对ThreadsPoolExecutor方法进行了简单封装,以方便使用。
阿里的代码规范中提出,不推荐使用JDK提供的线程池创建方法(newCachedThreadPool、newFixedThreadPool等),因此对ThreadPoolExecutor方法进行了简单封装,以方便使用。
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(5); 和创建单一线程池类似, 不同的是线程池中有多个线程, 可以并行处理任务, 若多个线程任务被提交到此线程池, 会有以下执行过程: 如果...
newFixedThreadPool(固定长度的线程池) newCachedThreadPool(不限规模的线程池) newSingleThreadPool(单线程线程池) newScheduledThreadPool(带延迟/定时的固定长度线程池) 具体...
public static ExecutorService newFixedThreadPool(int nThreads); 得到一个线程对象,初始化参数是要求的当前线程池中的线程数 public Future submit(Runnable target); 从线程池中获取一个线程对象,并且执行给定...
mina2 教程一个server 和client通信,支持同时在线,利用newfixedThreadPool线程池
简单易用的多线程发邮件。其中用的callble,里面的发送的邮件是固定的,利用的newFixedThreadPool。你可以自己调整成其他的线程池,原理一样。
我自己写了个小例子,用到两个关键字,datagrameSocket表示客户程序和服务程序自寻址套接字,datagramePacket对象描绘了自寻址包的地址信息,以及线程池Executors的newFixedThreadPool()方法
本项目是一个展示多线程下载的项目,使用线程池(Executors.newFixedThreadPool(2))对线程的管理,支持断点续传,第一个版本默认可以两个线程同时下载。