Java多线程之互斥锁Syncharnized

public class Bank {
    private int money;
    private String name;

    public Bank(String name, int money) {
        this.money = money;
        this.name = name;
    }

    //存款
    public synchronized void deposit(int m) {
        money += m;
    }

    //取款
    public synchronized boolean withdraw(int m) {
        if (money >= m) {
            money -= m;
            return true;    //取款成功
        } else {
            return false;  //余额不足
        }
    }

    public String getName() {
        return name;
    }
}

  如上所述,如果有一个线程正在运行Bank实例的deposit方法,那么其他线程无法运行这个实例中的deposit方法和withdraw方法,但未加锁的getName方法不受影响。当使用完syncharonized的方法运行完这个线程后,就会释放锁

线程的互斥机制称之为监视(monitor),另外,获取锁有时候也叫做拥有(own)监视或者持有(hold)锁。

当前线程是否已获得某一个对象的锁可以通过Thread.holdsLock方法来确定。当前线程已经获得对象obj的锁时,可使用assert像下面来表示

assert Thread.holdsLock(obj);

posted @ 2019-07-01 14:33  咯咯呀  阅读(253)  评论(0编辑  收藏  举报