NEW
一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并
未启动。还没调用start方法。MyThread t = new MyThread()只有线程象,没有线程
特征。
RUNNABLE
当我们调用线程对象的start方法,那么此时线程对象进入了RUNNABLE状态。那么此
时才是真正的在JVM进程中创建了一个线程,线程一经启动并不是立即得到执行,线程
的运行与否要听令与CPU的调度,那么我们把这个中间状态称之为可执行状态
(RUNNABLE)也就是说它具备执行的资格,但是并没有真正的执行起来而是在等待CPU
的度。
BLOCKED
当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入
Blocked状态;当该线程持有锁时,该线程将变成Runnable状态。
WAITING
一个正在等待的线程的状态。也称之为等待状态。造成线程等待的原因有两种,分别
是调用Object.wait()、join()方法。处于等待状态的线程,正在等待其他线程去执行一
个特定的操作。例如:因为wait()而等待的线程正在等待另一个线程去调用notify()或
notifyAll();一个因为join()而等待的线程正在等待另一个线程结束。
TIMED_WAITING
一个在限定时间内等待的线程的状态。也称之为限时等待状态。造成线程限时等待状
态的原因有三种,分别是:Thread.sleep(long),Object.wait(long)、join(long)。
TERMINATED
一个完全运行完成的线程的状态。也称之为终止状态、结束状态
线程池-Executors默认线程池
概述:JDK对线程池也进行了相关的实现,在真实企业开发中我们也很少去自定义线程池,而是使用JDK中自带的线程池。
我们可以使用Executors中所提供的静态方法来创建线程池
static ExecutorService newCachedThreadPool() 创建一个默认的线程池 static newFixedThreadPool(int
nThreads) 创建一个指定最多线程数量的线程池
示例代码
public class ThreadPool_01 { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); executorService.submit(() -> { System.out.println(Thread.currentThread().getName() + "在执行"); }); executorService.submit(() -> { System.out.println(Thread.currentThread().getName() + "在执行"); }); executorService.shutdown(); } }
线程池-Executors创建指定上限的线程池
static ExecutorService newFixedThreadPool(int nThreads) : 创建一个指定最多线程数量的线程池
示例代码
public class ThreadPool_02 { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(10); ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor)executorService; System.out.println(threadPoolExecutor.getPoolSize()); } }