Java多线程之互斥锁Syncharnized

原文链接: http://www.cnblogs.com/gegelaopiaoke/p/11113905.html
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);

转载于:https://www.cnblogs.com/gegelaopiaoke/p/11113905.html

猜你喜欢

转载自blog.csdn.net/weixin_30340353/article/details/94871302