Java 我可以从另一个对象对同一个同步锁调用wait吗?
我想在不同的对象上调用wait和notify,而不是在锁上同步的对象。以这段代码为例:Java 我可以从另一个对象对同一个同步锁调用wait吗?,java,multithreading,object,wait,notify,Java,Multithreading,Object,Wait,Notify,我想在不同的对象上调用wait和notify,而不是在锁上同步的对象。以这段代码为例: Class1.foo() { synchronized(lock) { while(condition) { try { lock.wait(); } } lock.notify(); } } 我想知道这是否等同于: Class1.foo() { syn
Class1.foo() {
synchronized(lock) {
while(condition) {
try {
lock.wait();
}
}
lock.notify();
}
}
我想知道这是否等同于:
Class1.foo() {
synchronized(lock) {
Class2.bar(lock);
}
}
Class2.bar(Object lock) {
while(condition) {
try {
lock.wait();
}
}
lock.notify();
}
谢谢 与对象关联,而不是与变量关联:
每个对象都有一个与之关联的内在锁。。一个线程在获取锁和释放锁之间拥有内在锁[与synchronized一样]
在给定的代码中,可以看到,在后一种情况下,简单地内联方法调用会导致在相同的序列中使用相同的对象
Class1.foo() {
synchronized(lock) {
while(condition) {
try {
lock.wait();
}
}
lock.notify();
}
}
Class1.foo() {
synchronized(lock) {
// >> inline from Class2.bar(Object lock) {
// where lock evaluates to the same object
while(condition) {
try {
lock.wait();
}
}
lock.notify();
// << end inline }
}
}
Class1.foo(){
已同步(锁定){
while(条件){
试一试{
lock.wait();
}
}
lock.notify();
}
}
类别1.foo(){
已同步(锁定){
//>>来自Class2.bar的内联(对象锁){
//其中lock计算为同一对象
while(条件){
试一试{
lock.wait();
}
}
lock.notify();
//可以,但这是可能出现死锁的典型情况。您需要始终确保所有线程以相同的顺序锁定锁。