多线程的“锁池”和“等待池”

多线程开发的一些概念和线程生命周期

synchronized修饰的方法,在执行的时候,线程会被排序依次执行。这时,线程会被阻塞在对象的“锁池”中,只有一个线程会被执行。至于哪个线程被执行,需根据不同的虚拟机实现机制不同。

进入synchronized方法块的线程,会立即持有该对象的锁,并从“锁池”中移除。执行完毕,会释放锁,“锁池”中的线程依据一定规则会有一个线程依次执行该synchronized代码块。

进入synchronized代码块的线程,如果执行wait方法,就会释放改对象锁,该线程进入“等待池”,知道其他线程调用该对象的notify方法是,才有可能被唤醒继续执行后续代码,线程被唤醒以后,该线程从“等待池”中移除。

每个对象都有自己的“锁池”和“等待池”,用来存放线程。线程进入“锁池”,会处于竞争锁状态,当其他线程释放锁以后,才可能竞争到锁,然后执行同步块代码。线程进入”等待池“,会等待其他线程调用notify或者notifyAll方法,来进入“锁池”状态。

 

posted @ 2020-09-04 09:38  孙工的编程生涯  阅读(1258)  评论(1)    收藏  举报