快捷搜索: 王者荣耀 脱发

【线程】锁池和等待池

锁池

概念:

假设线程A已经拥有了某个对象的(不是类)锁 ,而其他线程想要调用这个对象的某个synchronized方法(或者synchronized块),由于这些线程在进入对象的synchronized方法之前必须先获得该对象的锁的拥有权,但是该对象的所目前正被线程A拥有,所以这些线程就进入了该对象的锁池中,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到锁后会进入就绪队列进行等待cpu分配

等待池

概念:

简写一个线程A调用了某个对象的wait()方法,线程A就会释放该对象的锁(因为wait()方法必须出现在synchronized中,这样自然在执行wait()方法之前线程A就已经拥有了该对象的锁),同时线程A就进入到了对象的等待池中,等待池中的线程不会去竞争同步锁,用过另外一个线程调用了相同对象的notifyAll(),那么处于该对象等待池中的线程就回全部进入该对象的所持中,准备争夺锁的拥有权。如果另外的一个线程调用了相同对象的notify方法,那么仅有一个处于该对象的等待池中的线程(随机)会进入该对象的锁池

经验分享 程序员 微信小程序 职场和发展