线程池: 任务提交到线程池,而不是直接交给某线程,线程池拿到任务后,它在内部找空闲的线程进行执行(封装),任务是提交给线程池,一个线程只能执行一个任务,但可以同时向一个线程池提交多个任务。
创建固定大小的线程池
创建缓存线程池
如何实现线程死掉后重新启动?
答案:创建单一线程池Executors.newSingleThreadExecutor();
关闭线程池
shutdown() 线程池中都处于空闲是结束线程池
shutdownNow()线程池不管是否有任务在执行都停止
例子:
//线程池public class ThreadPool {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(1);Runnable command = new Runnable() {@Overridepublic void run() {System.out.PRintln("1"+Thread.currentThread().getName()); try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}};executorService.execute(command);executorService.execute(command);executorService.execute(command);executorService.execute(command);executorService.execute(command);executorService.shutdown();}}
输出:
1pool-1-thread-11pool-1-thread-11pool-1-thread-11pool-1-thread-11pool-1-thread-1
都是一个线程在执行这些任务;在3s执行下一个
----------------------------------------------------------------------
线程池启动定时器
调用ScheduledExecutorService的schedule方法,返回的ScheduleFuture对象可以取消任务。
支持间隔重复任务的定时方式,不直接支持绝对定时方式,需要转换成相对时间方式。
Executors.newSchdeduledThreadPool(3).schedule (....)
新闻热点
疑难解答