多线程-04-线程同步

说明:之前代码在 03线程安全问题 的文章中

一、线程同步的核心思想

  • 加锁,把共享资源进行上锁,每次只能一个线程进入访问完毕以后解锁,然后其他线程才能进来

二、线程同步实现

1、同步代码块

  • 作用:把出现线程安全问题的核心代码给上锁
  • 原理:每次只能一个线程进入,执行完毕之后自动解锁,其他线程才可以进来执行

格式

synchronized(同步对象锁){
   
	操作资源共享的代码(核心代码)
}

锁对象要求

  • 理论上:锁对象只要对于当前同时执行的线程来说是同一对象即可

1.1 代码实现

说明:所有代码都一样,只有Account类里边的drawMoney方法里边的核心代码部分加了synchronized 关键字

public void drawMoney(double money) {
   
        //  1、先获取是谁来取钱,线程的名字是任命
        String name = Thread.currentThread().getName();
        //  2、判断账户是否购钱
        synchronized ("此时的锁对象是任意的") {
   
            if (this.money>=money){
   
                //  3、取钱
                System.out.println(name+"来取钱成功,吐出:"+money);
                //  4、更新余额
                this.money-=money;
                System.out.println(name+"取钱后剩余:"+this.money);
            }else {
   
                //  余额不足
                System.out.println(name+"来取钱,余额不足!");
            }
        }
    }

运行结果
在这里插入图片描述

1.2 锁对象规范

问题:上

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值