每天一点小知识——Java中的线程

203 阅读1分钟

Java中的线程

线程类型

1.用户线程:平常创建的线程,isDaemon()==false 2.守护线程:线程调用start()前调用了setDaemon(true),守护线程优先级低,在守护线程中创建的线程也是守护线程,守护线程在JVM中没有其它用户线程时会马上停止执行(即使守护线程中有个未完成的任务也会停止)。垃圾回收线程就是一个守护线程

线程池
ExecutorService

ExecutorService是Java提供的线程池接口,Java内置的线程池实现:

1.ThreadPoolExecutor

extends AbstractExecutorService
AbstractExecutorService implements ExecutorService
  • Executors.newCachedThreadPool():无限线程池。最大线程数量Integer.MAX_VALUE,不当使用会导致线程过多。

  • Executors.newFixedThreadPool(nThreads):创建固定大小的线程池。

  • Executors.newSingleThreadExecutor():创建单个线程的线程池。适用于多个任务的串行执行。newFixedThreadPool(1)就是一个newSingleThreadExecutor()

这三种线程都是调用ThreadPoolExecutor的构造方法传入不同参数实现的

2.ScheduledThreadPoolExecutor

extends ThreadPoolExecutor
implements ScheduledExecutorService
  • Executors.newScheduledThreadPool(corePoolSize): 创建执行周期性任务的线程池

3.ForkJoinPool

extends AbstractExecutorService
  • Executors.newWorkStealingPool(parallelism) :JDK1.8新增的抢占式线程池,这是一个并发的线程池,线程之间的执行是无序的