线程池是java5之后新增的功能,使用呢线程池也至少是java5的jdk。
什么是线程池呢,就先准备好若干个线程等待执行任务,只要任务来了,存放线程的容器就是线程池,然后从池子拿出一个线程来让这个线程进行服务。
好处是什么呢?对于大量的任务来说,节省资源,不用频繁的创建线程和销毁线程带来的资源消耗。
线程池的使用有以下几种方式
创建固定大小的线程池:
ExecutorService threadPool = Executors.newFixedThreadPool(3); threadPool.execute(new Runnable(){ @Override public void run() { //执行的任务代码 } });
创建缓存线程池:
ExecutorService cachedPool = Executors.newCachedThreadPool(); cachedPool.execute(new Runnable(){ @Override public void run() { //业务代码 } });
创建单一线程池( 如何实现线程死了再重新建一个线程)
ExecutorService singlePool = Executors.newSingleThreadExecutor(); singlePool.execute(new Runnable(){ @Override public void run() { //业务代码 } });
关闭线程池:
//当没有任务可运行的时候关闭线程池
singlePool.shutdown();
//立即关闭线程池,不管任务是否执行完毕
singlePool.shutdownNow();
//线程池定时器
ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(2);
scheduledPool.schedule(command, delay, unit);
scheduledPool.scheduleAtFixedRate(command, initialDelay, period, unit);
//如何实现某个固定时间执行
scheduledPool.schedule(command, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS);