缓存线程池(长度无限制)
- 判断线程池是否存在空闲线程
- 存在则使用
- 不存在,则创建线程,并放入线程池,然后使用创建与使用
创建与使用
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Test1 {
public static void main(String[] args) {
//指挥线程池执行新的任务
ExecutorService service = Executors.newCachedThreadPool();
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"锄禾日当午");
}
});service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"锄禾日当午");
}
});service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"锄禾日当午");
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
service.execute(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"锄禾日当午");
}
});
}
}
pool-1-thread-3锄禾日当午
pool-1-thread-2锄禾日当午
pool-1-thread-1锄禾日当午
pool-1-thread-1锄禾日当午
定长线程池()长度是指定的数值
- 判断线程池是否存在空闲线程
- 存在则使用
- 不存在空闲线程池,且线程池未满的情况下,则创建线程,并放入线程池,然后使用
- 不存在空闲线程,并且线程池已满的情况下,则等待线程池存在空闲线程
周期性任务执行时
- 定时执行,当某个时机触发时,自动执行任务.
-
创建与使用
-
ScheduledExecutorService service = Executors.newScheduledThreadPool(2); /** * 1. 定时执行一次 * 参数1. 定时执行的任务 * 参数2. 时长数字 * 参数3. 时长数字的时间单位 , TimeUnit的常量指定 */ service.schedule(new Runnable() { @Override public void run() { System.out.println(""); } },5, TimeUnit.SECONDS);
周期执行
ScheduledExecutorService service = Executors.newScheduledThreadPool(2);
/**
* 周期执行任务
* 参数1. 任务
* 参数2. 延迟时长数组(第一次执行在什么时间以后)
* 参数3. 周期时长数字(每隔多久执行一次)
* 参数4. 时长数字单位
*/
service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("锄禾日当午");
}
},5,1,TimeUnit.SECONDS);