同步方法和 Semaphore(1, true) 的语义等价吗?
以下两个方法定义在语义上是否等效?为什么?为什么不呢?
版本 A:
private static synchronized void foo() {
bar();
}
版本 B:
private static Semaphore available = new Semaphore(1, true);
private static void foo() {
available.acquire();
try {
bar();
}
finally {
available.release();
}
}
Are the following two method definitions semantically equivalent? Why? Why not?
Version A:
private static synchronized void foo() {
bar();
}
Version B:
private static Semaphore available = new Semaphore(1, true);
private static void foo() {
available.acquire();
try {
bar();
}
finally {
available.release();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
是的,除了
Yes, except
我会说不 - Java
synchronized
块不能保证保留顺序,即它不公平。new Semaphore(1, true)
是公平的(true
参数)。I would say no - Java
synchronized
block is not guaranteed to preserve order, i.e. it is not fair.new Semaphore(1, true)
is fair (true
argument).