因此,我要弄清楚如何获取对象以跟踪执行程序服务的每次迭代所带走的钻石数量。

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实例(sneezydopey)都有自己的lock / mutex / monitor,因此将synchronized放在run方法上不会同步任何内容,因为每种方法都使用不同的“锁”。

我认为如果MineDwarf具有单独的类,将更容易理解。如果在extractDiamonds上具有Mine方法,则可以将synchronized放在该方法上并实现所需的功能。假设您将创建一个Mine对象实例,并以某种方式将其传递给您创建的每个Dwarf实例...或类似的对象。

09-11 19:21