一、线程状态
1. new:新创建一个线程对象,还未调用start函数
2. Runnable:调用start函数,准备就绪状态,等待操作系统分配时间片
3. Running:得到CPU时间片
4. 等待队列:释放对象锁,JVM将当前线程放到等待线程队列(可指定等待超时时间)
5. 锁池:若对象锁被其他线程持有,JVM将当前线程放到锁池线程队列
6. 阻塞:不会释放对象锁,CPU不再给线程分配时间片,直到重新进入就绪状态
7. 终止:线程结束
二、函数对比
1. sleep:Thread对象的函数,线程进入TIME_WAITING状态,不会释放对象锁,直到sleep结束,重新进入就绪状态
2. wait:Object的函数,将该线程加入对象监视器队列,同时释放对象锁
3. notify:Object的函数,唤醒在对象监视器的等待的单个线程(notifyall唤醒所有线程)
4. yield:放弃cpu时间片,重新进入就绪状态