一、线程状态
Thread.STATE6种状态:
NEW(新建状态):至今尚未启动的线程,即未调用start方法;
RUNNABLE(运行状态):正在JAVA虚拟机中执行的线程;
BLOCKED(阻塞状态):受阻塞并等待某个监视器锁的线程;
WATTING(无线等待状态):无限期等待另一个线程来执行某一特定操作的线程,wait()方法后不竞争锁了,也不会浪费CPU资源;
TIMED_WAITING(休眠状态):等待另一个线程来执行取决于指定等待时间的操作的线程;
TERMINATED(死亡状态):已退出的线程。
阻塞状态:具有CPU的执行资格,等待cpu空闲时执行
休眠状态:放弃CPU执行资格,CPU空闲也不执行
线程状态1.png
二、线程间通信
多个线程并发执行完成共同任务时,我们希望他们有规律的进行,则线程之间需要一些协调通信。(等待唤醒机制)
等待唤醒机制:
案例:包子铺和顾客
分析:
线程状态2.png
实现:
线程状态3.1.png 线程状态3.2.png 线程状态3.3.png 线程状态3.4.png
三、线程池
如果并发的线程数量很多,并且每个线程都是执行一个很短的时间就结束了,这样频繁创建线程就会大大降低系统效率,因为创建线程和销毁线程需要时间。
线程池:
容纳多个线程的容器,其中线程可以反复使用,省去了创建线程对象的操作。
JDK1.5后内置了线程池可以直接使用。
ExecutorService es = Executors.newFixedThreadPool(int threads);
网友评论