首页 > 其他分享 >synchronized保证线程安全

synchronized保证线程安全

时间:2023-03-06 20:11:25浏览次数:26  
标签:account synchronized money Account Drawing 保证 线程 drawing

package com.Java;

//银行不安全案例 两个人同时取钱
//使用 synchronized和synchronized块 可以锁住对象 保证线程的安全性
public class TestBank {
public static void main(String[] args) {

Account account = new Account(50);
Drawing you = new Drawing(account, 50, "你");
Drawing youGirl = new Drawing(account, 50, "你妻子");
new Thread(you).start();

new Thread(youGirl).start();

}
}

class Account {
int money; //手里有多少钱

public Account(int money) {
this.money = money;
}
}

class Drawing extends Thread {

private Account account; //账户
int drawing; //取款多少钱

public Drawing(Account account, int drawing, String name) {
super(name);//把名字传给Thread 这里相当于getName的值
this.account = account;
this.drawing = drawing;
}

@Override
public /*synchronized*/ void run() { //synchronized 指人对象默认是this 即当前所在类的对象
synchronized (account) { //synchronized块可以锁指定对象
if (account.money - drawing < 0) {
System.out.println("钱不够 取不了");
return;
}
System.out.println(this.getName() + "取了" + drawing + "万");
account.money = account.money - drawing;
System.out.println("余额还有" + account.money);
}

}
}

标签:account,synchronized,money,Account,Drawing,保证,线程,drawing
From: https://www.cnblogs.com/fc666/p/17185225.html

相关文章

  • 多线程
    多线程概念程序为了完成某个任务或功能,选择某个编程语言而编写的一组代码指令的集合进程程序的一次运行,是操作系统管理和调度的最小单位,每一个进程之间内存是......
  • 使用python多线程检测ip地址
    #检测得ip地址在C:\Users\admin\Desktop\iplist.txt文件中importsubprocessimportthreadingimportIPyimportrefromqueueimportQueueimporttimeip_use=[]#检......
  • 一个线程两次调用start()方法会出现什么情况?
    Java的线程是不允许启动两次的,第二次调用时,线程可能处于终止或者其它(非NEW)状态,必然会抛出IllegalThreadStateException,这是一种运行时异常,多次调用start被认为是编程错误......
  • 线程池的核心参数
    1corePoolSize:核心线程数最多保留的线程数目2maximumPoolSize:最大线程数核心线程数+救急线程数3keepAliveTime:生存时间针对救急线程4unit:时间单位针对救急线程......
  • java多线程分析
    在java多线程中编程中,异常处理非常重要,会影响应用程序的整体运行情况。1、线程中可以捕捉的异常我们在普通的方法中,是支持exception往上层throw,简单来说,就是当前逻辑不......
  • JAVA多线程(四)--锁的定义
    一、乐观锁乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次拿数据时都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这......
  • 线程安全集合类
           ......
  • 7.如何在保证页面运行流畅的情况下处理海量数据
    一般有两种做法1.时间分片setTimeout是宏任务,先执行完所有的微任务,才会触发渲染线程对页面进行渲染,而setTimeout的触发时间是渲染完成,在下一次eventloop中执行的。 ......
  • java 线程常用方法
    方法名作用特点start()启动线程,线程进入可运行状态不是立马执行,还需要等一个时机,等抢到CPU调度权就执行join()加入线程,等加入的线程执行结束再执行当前......
  • java 线程中断
    线程中断方法被弃用,如果要实现该功能需要手动实现,一种思路是定义一个布尔值变量(对外提供方法修改变量值)每次做业务都要判断该,如果为true说明不需要停止,如果为false就停......