目录
- newCachedThreadPool
- newFixedThreadPool
- newScheduledThreadPool
- newSignleThreadPool
一、newCachedThreadPool
/**
* 构造函数:初始化线程池大小为0, 最大线程池大小为Integer.MAX_VALUE,线程闲置回收时间为60秒。
* 执行策略:当接收任务时,如线程池中有闲置线程直接执行任务;如线程池中无闲置线程可用,则创建线程执行任务;
* 如闲置线程闲置时间超过60秒,则进行销毁
* 实例代码如下
*/
ExecutorService newCacheThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int num = i;
newCacheThreadPool.execute(new Runnable() {
@Override
public void run() {
System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
}
});
}
二、newFixedThreadPool
/**
* 构造函数:指定线程池的最大值
* 执行策略:当提交任务时, 如果线程池中有闲置线程, 则直接执行任务; 如果线程池中无线程, 则创建线程执行任务;
* 如果线程池中无闲置线程, 且线程池数量达到最大值, 则将任务放入待执行任务队列。
* 实例代码如下
*/
ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; i++) {
final int num = i;
newFixedThreadPool.execute(new Runnable() {
@Override
public void run() {
System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
}
});
}
三、newScheduledThreadPool
/**
* 构造函数: 指定核心线程数量
* 执行策略:当提交任务时, 如果线程池中有闲置线程, 则直接执行任务; 如果线程池中无线程, 则创建线程执行任务;
* 如果线程池中无闲置线程, 且线程池数量达到最大值, 则将任务放入队列。
* 延时执行实例代码如下
*/
ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);
for (int i = 0; i < 10; i++) {
final int num = i;
newScheduledThreadPool.schedule(new Runnable() {
@Override
public void run() {
System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
}
}, 1000, TimeUnit.MILLISECONDS);
}
/**
* 构造函数: 指定核心线程数量
* 执行策略:当提交任务时, 如果线程池中有闲置线程, 则直接执行任务; 如果线程池中无线程, 则创建线程执行任务;
* 如果线程池中无闲置线程, 且线程池数量达到最大值, 则将任务放入队列。
* 延时定时执行实例代码如下
*/
ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(2);
for (int i = 0; i < 10; i++) {
final int num = i;
newScheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
}
}, 1000, 1000, TimeUnit.MILLISECONDS);
}
四、newSingleThreadPool
/**
* 构造函数: 创建唯一的单线程
* 执行策略: 当提交任务时, 如果线程闲置, 则直接执行任务; 如果闲置不闲置, 则将任务放入待执行队列
* 实例代码如下
*/
ExecutorService newSingleThreadPool = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
final int num = i;
newSingleThreadPool.execute(new Runnable() {
@Override
public void run() {
System.out.println("第" + num + "个线程" + "-" + Thread.currentThread().getName());
}
});
}
针对线程池的详细使用,还请具体查看源码