java线程池基础(持续更新)

目录

    • Executor、ExecutorService、Executors三者的区别:
    • ThreadLocal

Executor、ExecutorService、Executors三者的区别:

  1. 层次关系
public interface ExecutorService extends Executor {}
public abstract class AbstractExecutorService implements ExecutorService {}
public interface ScheduledExecutorService extends ExecutorService {}

public class ThreadPoolExecutor extends AbstractExecutorService {}
public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ScheduledExecutorService {}

转至博客园:九零大叔芭蕉
2.区别

  • ExecutorService 接口继承了Executor 接口,是Executor 的子接口。
  • Executor接口中定义了execute()方法,用来接收一个Runnable接口的对象,
    而ExecutorService接口中定义的submit()方法可以接收Runnable和Callable接口对象。
  • Executor接口中execute()方法不返回任何结果,而ExecutorService接口中submit()方法可以通过一个 Future对象返回运算结果。(Future常用)
  • Executor和ExecutorService除了允许客户端提交一个任务,ExecutorService 还提供用来控制线程池的方法。
      比如:调用 shutDown() 方法终止线程池。
  • Executors 类提供工厂方法用来创建不同类型的线程池。比如:

1.Executors.newSingleThreadExecutor() 创建一个只有一个线程的线程池,

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

2.Executors.newFixedThreadPool(int numOfThreads)来创建固定线程数的线程池,

创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。

3.Executors.newCachedThreadPool()创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

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

4.Executors.newScheduledThreadPool(int corePoolSize) 创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

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

ThreadLocal

CSDN-倔强的不服-史上最全ThreadLocal 详解(一)

你可能感兴趣的:(JAVA基础,java,jvm,开发语言)