gpt4 book ai didi

java - 同步方法中的synchronized(this) block

转载 作者:行者123 更新时间:2023-12-01 16:52:16 24 4
gpt4 key购买 nike

以下是实践中的java并发书中讨论开放调用时的代码片段。我没有得到的一点是 setLocation 方法的声明方式,它已经同步并再次在同一方法中调用同步(this) block ,为什么这样?是类型错误吗?同步方法已经持有该方法的锁,那么为什么还要对同一个对象再次持有锁呢?

   @ThreadSafe 
class Taxi {
@GuardedBy("this") private Point location, destination;
private final Dispatcher dispatcher;
...
public synchronized Point getLocation() {
return location;
}
public synchronized void setLocation(Point location) {
boolean reachedDestination;
synchronized (this) {
this.location = location;
reachedDestination = location.equals(destination);
}
if (reachedDestination)
dispatcher.notifyAvailable(this);
}
}

最佳答案

这是书中的一个错误。请参阅the errata

In Listing 10.6, Taxi.setLocation should not be a synchronized method. (The synchronized block in its body is correct, however.)

关于java - 同步方法中的synchronized(this) block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com