极其重要的线程池
线程池类Executors
public static void main(String[] args) {
//1)创建固定大小为3个线程的线程池
//ExecutorService threadPool = Executors.newFixedThreadPool(5);
//2)创建动态变化的线程池
ExecutorService threadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
//把外部的第几个任务引进来方便查阅
final int t = i;
//往线程池里塞任务
threadPool.execute(new Runnable() {
public void run() {
//每个任务打印10遍
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "loop of i :" + i + "worker t :" + t);
}
}
});
}
//任务结束后关闭线程池
threadPool.shutdown();
}
创建只有一个线程的线程池
只有一个线程的线程池虽然只有一个线程,但是当那个线程池挂掉之后,线程池自动补上一个线程继续完成任务
ExecutorService threadPool = Executors.newSingleThreadExecutor();
创建有三个线程的定时线程池
//未来预定
ScheduledFuture es = Executors.newScheduledThreadPool(3).schedule(callable, delay, unit);
1)callable:表示任务是什么
2)delay:表示过多长单位时间执行
3)unit:表示单位时间
***案例***
//过三秒取任务执行
ScheduledFuture<?> es = Executors.newScheduledThreadPool(3).schedule(new Runnable() {
public void run() {
System.out.println("BOOM!");
}
}, 3, TimeUnit.SECONDS);
创建有三个线程的定时线程池持续炸
ScheduledFuture es = Executors.newScheduledThreadPool(3).scheduleAtFixedRate(command, initialDelay, period, unit);
1)表示要执行的任务
2)表示第一次执行要多长时间
3)表示隔几个单位时间长度再执行一次
4)设置单位时间
****案例****
ScheduledFuture es = Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("BOOM!");
}
}, 5, 1, TimeUnit.SECONDS);