java线程池
来源:互联网 发布:山东邮政网络培训学院 编辑:程序博客网 时间:2024/05/19 15:42
对java.util.concurrent包中创建线程池的几个方法做简单记录
1.Executors.newFixedThreadPool(int nTreads)
创建固定线程数,创建的 线程数为nThreads
下面的例子创建一个固定线程数量的线程池,内有3个线程,分配给了10个任务,3个线程执行这10个任务,当一个线程执行完一个任务之后,再去执行另一个任务,直到所有的任务执行完毕,但线程池中线程不会销毁。
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolTest { public static void main(String[] args) {//在线程池中创建3个线程 ExecutorService threadPool=Executors.newFixedThreadPool(3); //创建10个任务,每个任务会被线程池中的这个三个线程中的其中一个去执行 for (int i = 0; i < 10; i++) { final int task=i+1; threadPool.execute(new Runnable() {@Overridepublic void run() { for (int j = 0; j < 10; j++) { try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();} System.out.println(Thread.currentThread().getName()+" of loop "+j+" of task"+task); }}}); } }}
创建一个缓存线程池,缓存线程池中线程的数量是不固定的,动态变化,有多少个任务创建多少个线程,比如上面的例子创建了10个任务,那么线程池中会创建10个线程分别去处理这10个任务,任务执行完后,超时一段时间,多余线程销毁。
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class ThreadPoolTest { public static void main(String[] args) { ExecutorService threadPool=Executors.newCachedThreadPool(); //十个任务,会创建10个线程分别去执行这十个任务 for (int i = 0; i < 10; i++) { final int task=i+1; threadPool.execute(new Runnable() {@Overridepublic void run() { for (int j = 0; j < 10; j++) { try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();} System.out.println(Thread.currentThread().getName()+" of loop "+j+" of task"+task); }}}); } }}
3. Executors.newSingleThreadExecutor()
4. Executors.newScheduledThreadPool(int nThread).schedule(Runable r,long delay,TimeUnit unit)
Executors.newScheduledThreadPool(int nThread).scheduleAtFixedRate(Runable r,long delay,long period,TimeUnit unit)
第一种 创建一个线程池,该线程池创建nThread个线程 定时delay时间去执行任务
第二种 延时delay时间后执行线程任务,且以固定周期period重复执行
下面的事例在线程池创建了三个线程,定时10秒后执行线程任务,且2秒后重复执行。
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() { @Override public void run() { System.out.println("bombing..");}}, 10,2, TimeUnit.SECONDS);
- Java线程:线程池
- java--线程--线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(五):线程池
- Java线程_07_线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(六):线程池
- Java线程(五):线程池
- Java线程(六):线程池
- 寻找一种易于理解的一致性算法(扩展版)
- xnamath.h 报错: 在标识符“XMConvertToRadians”的前面
- 编写一个递归方法,它返回数N的二进制表示中1的个数
- bzoj2081: [Poi2010]Beads
- js中Array和Object学习
- java线程池
- Android Studio自用插件小记
- SFP电口模块安装/移除指导
- 什么才是正确的原型设计?
- Android Studio项目中新建assets文件的方法
- 1120. Friend Numbers 解析
- 数据库E-R图基础
- 蓝桥杯
- error: macro names must be identifiers