【发布时间】:2015-12-22 19:50:43
【问题描述】:
我对此表示怀疑,在 Java 语言中,我们需要先获取锁,然后才能等待满足某些条件。
例如 int java monitor lock:
synchronized(lock){
System.out.println("before lock ...");
lock.wait();
System.out.println("after lock ...");
}
或并发工具:
Lock lock = new ReentrantLock();
Condition cond = lock.newCondition();
lock.lock();
try{
System.out.println("before condition ...");
cond.await();
System.out.println("after condition ...");
}catch(Exception e){
e.printStackTrace();
}finally{
lock.unlock();
}
那么,为什么我们不能等待,而不持有锁?
其他语言有什么不同,还是只是 Java 不同?
希望你能在设计后说明原因,但不能只针对JAVA-SPEC定义。
【问题讨论】:
-
Java运行在虚拟机的上下文中,指定了虚拟机的行为。
-
所以,那是因为 SPEC?
-
当然是因为规范。奇怪的问题。
-
因为这是 POSIX 要求。 JVM是基于它的。 stackoverflow.com/a/52384541/851185
标签: java multithreading concurrency wait java.util.concurrent