线程基本信息详解
线程的五种状态
创建: 新建一个线程对象
就绪:线程调用 start() 方法, 变得可运行,等待 CPU资源
运行:线程获取 CPU资源,执行程序代码;
阻塞:线程应为某种原因放弃CUP资源,暂时停止运行,直至线程再次进入就绪状态,才有机会运行;
死亡: 线程执行完成或者 异常退出 run()方法,该线程结束生命周期;
线程的三种阻塞情况
等待阻塞: 运行的线程执行 wait(),线程会释放资源,JVM会把线程添加到’等待池’中,该种情况线程不能自动唤醒,需要调用 notify()或者notifyAll()才能唤醒;wait()是object的方法;
同步阻塞: 运行线程在获取对象同步锁时,若该同步锁被其他线程占用,则JVM将该线程放入到 ‘锁池’中;
其他阻塞: 运行线程执行 sleep(), join(),或者发生 I/O请求时,JVM会将线程设置成阻塞状态,当sleep超时,join等待结束或者超时,I/O执行完成时,线程会进入到就绪状态; sleep()是 Thread 的方法;
sleep(),wait(), yeid(), join() 的区别
锁池 : 所有需要竞争同步锁 (synchronized)的线程才会放入到 '锁池’中;例如,当线程B去获取同步锁时,发现同步锁已经被 A线程 占用,那么线程B就会进入‘锁池中’;
等待池: 当线程 执行 wait() 方法时(使用wait()方法必须是在 synchronized中),