因此,我要弄清楚如何获取对象以跟踪执行程序服务的每次迭代所带走的钻石数量。
public class DwarfMine {
public DwarfMine() {
}
public int diamonds = 100;
public int getDiamonds() {
return diamonds;
}
public synchronized int subtractDiamonds(int howMany) {
diamonds -= howMany;
System.out.println("There are now " + diamonds + " left in the mine!");
return diamonds;
}
}
最佳答案
每个DwarfMine
实例(sneezy
,dopey
)都有自己的lock / mutex / monitor,因此将synchronized
放在run
方法上不会同步任何内容,因为每种方法都使用不同的“锁”。
我认为如果Mine
和Dwarf
具有单独的类,将更容易理解。如果在extractDiamonds
上具有Mine
方法,则可以将synchronized
放在该方法上并实现所需的功能。假设您将创建一个Mine
对象实例,并以某种方式将其传递给您创建的每个Dwarf
实例...或类似的对象。