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新增的抢占式线程池,这是一个并发的线程池,线程之间的执行是无序的