如何理解Java Thread中的wait和notify方法?
我对这两个描述非常困惑:
>“wait方法阻塞调用线程并放弃监视器锁定” 这是我的问题: >我知道Java中的每个对象都有一个锁,但“监视器锁”是什么意思?是否与oject的锁相同? class simpleTask extends Thread { int waitingTime; public simpleTask(int waitingTime) { this.waitingTime = waitingTime; } public void run() { synchronized(this) // this is a reference of current object { try { this.wait(waitingTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 像上面的第一个描述一样,是指当前对象被synchronized关键字阻塞,然后wait方法释放锁? 解决方法
是的,他们是一回事.它们偶尔也被称为对象的“互斥体”和对象的“原始锁定”. (但是当有人谈论Lock时,他们正在谈论this Java interface ……这是一种不同的锁定机制.)
notify方法不会放弃锁定.在通知调用返回后,您的代码有责任放弃锁定(即保留同步块或从synchronized方法返回). 为什么这有必要?因为当前正在等待该锁定的任何其他线程(在等待(…)调用中)必须在等待调用完成之前重新获取该锁定. 他们为什么设计这样的通知/等待?这样它们就可以用来实现条件变量.
那是正确的.当一个线程调用someObject.wait()时,它释放someObject的锁定…然后在wait()调用返回之前重新获取(由同一个线程).当然,在此期间,锁定someObject可能已被其他线程多次获取和释放.关键是当wait返回时,调用wait的线程将拥有锁. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |