一、线程状态
1.NEW,创建线程
2.RUNNABLE, 等待CPU调度
3.BLOCKED,阻塞状态,同步锁
4.WAITING,等待状态,wait,suspoed,park
5.TIMED_WAITING,根据时间等待状态,有超时时间
6.TERMINATED,终止状态
二、线程终止
1.stop方法,强行终止线程,如果线程执行到一半在等待状态也会被终止,不会抛异常,会导致程序运行结果错误
2.interrupte方法,终止线程,会抛出interrupteException方法,程序员可以自行控制异常逻辑
3.循环里面用变量控制退出线程
三、线程封闭
1.栈封闭,2.ThreadLocal 变量封闭
四、线程通信
1.suspend, resume 不会释放锁,对执行顺序有要求,已被弃用
2.wait, notify, notifyAll 会释放锁,对执行顺序有要求
3.park, unpark 不会释放锁,对执行顺序没有要求
五、线程池
newFixedThreadPool(int nThreads) 固定大小、队列容量无界的线程池。核心线程数= 最大线程数
newCachedThreadPool() 大小无界的缓冲线程池。它的任务队列是一个同步队列。任务加入到池中,如果池中有空闲线程,则用空闲线程来执行,如无则创建新线程执行。池中线程空闲超过60秒,将被释放销毁。线程数随任务多少的变化,适用于执行耗时较小的异步任务。池的核心线程数=0,最大线程数=Integer.Max_Value
newSingleThreadExecutor() 只有一个线程来执行无界任务队列的单一线程池。该线程池确保任务按加入的顺序一个一个一次执行。当唯一的线程因任务异常中止时,将创建一个新的线程来执行后续任务。与newFixedThreadPool 的区别是,单一线程池固定了大小不能改变。
newScheduledThreadPool(int corePoolSize) 能定时执行任务的线程池。该池的核心线程数由参数指定 ,最大线程数= Integer.Max_Value