账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于Syschronized的问题
    70
    0

    如下的代码,如果使用多线程调用的话。我知道syncTransfer的方法体同时只能有一个线程执行它。但是有没有可能另外一个线程在这个方法体执行的时候调用另外的方法修改了 accounts[from] 的值呢?

        public void syncTransfer(int from, int to, double amount) {
            lock.lock();
            try {
                while (accounts[from] < amount) {
                    sufficientFunds.await();//满足条件钱不再向下执行同时释放锁。
                }
                System.out.print(Thread.currentThread());
                accounts[from] -= amount;
                System.out.println("从" + from + "转到" + to + "金额" + amount);
                accounts[to] += amount;
                System.out.println("当前银行一共金额" + getTotalBalance());
                sufficientFunds.signalAll(); //唤醒所有等待这个锁的线程
            } catch (Exception e) {
                System.err.println(e.getStackTrace());
            } finally {
                //必须释放锁
                lock.unlock();
            }
    
        }
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 郡潇 普通会员 1楼
      502 Bad Gateway

      502 Bad Gateway


      nginx
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部