并发编程问题java

时间:2016-12-11 01:05:30

标签: java concurrency

所以我要弄清楚如何让对象跟踪执行者服务的每次迭代他们花了多少钻石

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;
    }

}

1 个答案:

答案 0 :(得分:2)

每个DwarfMine实例(sneezydopey)都有自己的锁/互斥锁/监视器,因此synchronized方法上的run不会同步任何事情,因为每种方法都使用不同的“锁定”。

我认为如果你有MineDwarf的单独课程会更容易理解。如果您在extractDiamonds上使用Mine方法,则可以将synchronized放在该方法上并实现您想要的效果。这假设您将创建一个Mine对象实例,并以某种方式将其传递给您创建的每个Dwarf实例......或类似的东西。