四者都是将,线程暂定,休息,中断,等待。
1,锁池:所有需要竞争同步锁的线程都会放到锁池中。得到同步锁后就会进入就绪队列进行cpu资源分配
2,等待池:调用了wait()后,线程被放到等待池中。只有调用了notify()或notifyAll(),线程才会去竞争同步锁。
sleep(原理:把cpu的执行资格权利释放出去,过了休眠时间再收回,即使该线程有锁,sleep了也不会释放锁)
sleep和wait区别:
1,sleep是Thread的静态本地方法,wait是Object类的本地方法
2,sleep方法不会释放lock,但是wait会释放。
3,sleep不依赖于同步器(synchronize),但是wait需要依赖。
4,sleep不需要被唤醒,但是wait要
5,sleep一般用于当前线程休眠,轮循暂停,wait则多用于多线程中的通信
6,sleep 会让出cpu执行时间,且强制上下午切换,而wait不一定,还有机会进行竞争同步锁
yield执行后,线程从运行状态进入就绪状态,释放cpu的执行权,(将全力给回cpu),但是依然保留cpu的执行资格,所以有可能cpu下次还有可能让该线程执行
join执行后,线程进入阻塞状态。线程b调用a的join(),b进入阻塞队列,知道线程a结束才能运行b。