多线程(5)

同步方法

synchronized关键字,包括两种用法:synchronized方法和synchronized块

同步方法

public synchronized void method(int args){}

银行取钱案例

卡里有100元,我取50元,别人取100元,可以取成功,卡里余额显示-50元

加入synchronized块之后便不会发生这样的情况

复制代码
package com.Thread.lesson03;

import javax.swing.plaf.nimbus.AbstractRegionPainter;

/**
 * 不安全的取钱
 *
 */
public class UnsafeBank {
    public static void main(String[] args) {
        Account account = new Account(100,"存款");

        Drawing you = new Drawing(account,50,"你");
        Drawing girlFriend = new Drawing(account,100,"girlFriend");

        you.start();
        girlFriend.start();
    }
}

//账户
class Account{
    int money;
    String name;
    public Account(int money,String name){
        this.money = money;
        this.name = name;
    }
}
//模拟取钱
class Drawing extends Thread{

    Account account;
    //取走的钱
    int drawingMoney;
    int nowMoney;//手头的钱

    public Drawing(Account account,int drawingMoney,String name){
        super(name);
        this.account = account;
        this.drawingMoney = drawingMoney;
    }

    //取钱
    @Override
    public void run() {
        synchronized (account){//用synchronized锁住
            //判断有没有钱
            if (account.money-drawingMoney<0){
                System.out.println(Thread.currentThread().getName()+"钱不够");
                return;
            }

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //卡内余额
            account.money = account.money - drawingMoney;
            //手头的钱
            nowMoney = nowMoney + drawingMoney;

            System.out.println(account.name+"余额"+account.money);
            //Thread.currentThread().getName()=this.getName()
            System.out.println(this.getName()+"手里有"+nowMoney);

        }

    }
}
复制代码

 

posted @   长空扯淡  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示