一、线程有如下6中状态
- New(新创建)
当用new关键字创建线程时(new Thread(r)),此时线程还没有开始运行。它的状态为new。当一个线程处于新创建状态时,程序还没有开始执行线程中的代码。在线程运行之前还有一些基础工作要做。
- Runnable(可运行)
一旦调用start方法,线程出入runnable状态。一个可运行状态的线程可能正在运行也可能没有运行。取决于操作系统给线程提供运行的时间
- Blocked(被阻塞)
- Waiting(等待)
- Timed Waiting(计时等待)
- Terminated(被终止)
可以用getState方法确认线程当前状态
二、线程属性
- 线程优先级
每一个线程都有一个优先级,线程继承父线程的优先级,可以通过setPriority设置MIN_PRIORITY(1)与MAX_PRIORITY(10)中间的任何值,NORM_PRIORITY为5
- 守护线程
可通过setDaemon(true)将线程设置成守护线程
- 线程组
- 处理未捕获异常的处理器
三、Executor(执行器)
执行器构建线程池方法
newCachedThreadPool 必要时创建新线程,空闲线程保留时间60s
newFixedThreadPool 该池包含固定数量的线程,空闲线程一直保留
newSingleThreadExecutor 只有一个线程的“池”,该线程顺序执行每一个提交的任务
newScheduledThreadPoll 用于预定执行而构建的固定线程池 替代java.util.Timer
newSingleScheduledThreadExecutor 用于预定执行的单线程池
使用线程池好处:减少并发的线程数目,防止创建大量线程降低性能,以及虚拟机崩溃