Java的四种线程池

线程池的作用

限制系统中执行线程的数量

根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列中取出最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了,否则进入等待队列。

为什么要用线程池

  1. 让线程可以重复利用,执行多个任务,减少了线程创建和销毁的次数。
  2. 根据系统情况,调整线程数量,数量过多则会造成内存资源占用过多,可能会把服务器累趴下;数量过少则会造成造成系统资源的浪费。

四种常用的线程池

  1. newSingleThreadExecutor

    创建一个单线程的线程池,只有一个线程工作。如果这个唯一的线程因为异常结束,那么会有一个新的线程来代替它。此线程池保证所有的任务都按照其提交的顺序执行。

  2. newFixedThreadPool

    创建固定大小的线程池,每提交一个任务创建一个线程,直达达到线程池的最大数量。数量达到最大之后就会保持不变,如果某个线程因为异常结束,就会创建一个新的线程。

  3. newCachedThreadPool

    创建一个可以缓存的线程池,如果当前线程池的大小超过了处理任务需要的大小,就会回收部分部分空闲空间(60s不执行任务)。当任务数增加,就会再创建新的线程处理此任务。此线程池不会对线程池大小做限制,完全依赖于操作系统或者JVM能够创建的最大线程大小。

  4. newScheduledThreadPool

    创建一个大小无限的线程池,此线程池支持定时以及周期性的执行任务。

你可能感兴趣的:(多线程)