public class ExecutorServiceDemo {
public static void main(String[] args) {
// 单线程池
ExecutorService executorService1 = Executors.newSingleThreadExecutor();
//固定线程数线程池
ExecutorService executorService2 = Executors.newFixedThreadPool(2);
//不限数量线程池 最大数量 Integer.MAX_VALUE;
ExecutorService executorService3 =Executors.newCachedThreadPool();
PoolDemo demo = new PoolDemo();
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD hh-mm-ss.SSS");
System.out.println("begin"+ sdf.format(new Date()));
//定时线程池
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3);
//TimeUnit.SECONDS说明‘3’的单位是秒 从现在开始,推迟3秒后执行demo的run方法
scheduledExecutorService.schedule(demo, 3, TimeUnit.SECONDS);
//推迟1秒 然后不管前面的线程是否执行完, 每隔2秒执行demo的run方法(固定速率)
scheduledExecutorService.scheduleAtFixedRate(demo, 1, 2, TimeUnit.SECONDS);
// 推迟3秒 开始执行demo的run方法 然后在前面线程执行完后4秒后 再次执行demo的run方法(固定延迟时间)
scheduledExecutorService.scheduleWithFixedDelay(demo, 3, 4, TimeUnit.SECONDS);
}
}
class PoolDemo implements Runnable{
int num =0 ;
@Override
public void run() {
if(num%2 ==0 ){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
num++;
}
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD hh-mm-ss.SSS");
System.out.println("执行一次run后"+sdf.format(new Date()));
}
}