package com.chang.exer;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;/*** 题目:两个储户分别向同一个帐户存3000元,每次存1000,存三次。每次存完打印账户余额。** @author Cao Longchang* @create 2022-04-28 20:15*/// 测试类
public class AccountTest {public static void main(String[] args) {Customer c1 = new Customer("甲", 3000);Customer c2 = new Customer("乙", 5000);Thread t1 = new Thread(c1);Thread t2 = new Thread(c2);t1.start();t2.start();}
}// 账户类
class Account {private static float balance = 0F;public static float getBalance() {return balance;}public static void setBalance(float balance) {Account.balance = balance;}
}//储户类
class Customer implements Runnable {private String name;private float balance;public Customer(String name, float balance) {this.name = name;this.balance = balance;}@Overridepublic void run() {for (int i = 0; i < 3; i++) {deposit(1000);//强制阻塞,增大线程交替执行的概率try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}}}// 创建Lock对象static Lock lock = new ReentrantLock();// 创建存钱方法,并使用Lock锁方式保证线程安全void deposit(float money) {try {lock.lock();if (money <= balance) {float b1 = Account.getBalance() + money;balance -= money;//强制阻塞,增大不安全概率try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}Account.setBalance(b1);System.out.println(this.name + "存钱成功,余额为:" + b1);} else {System.out.println(this.name + "对不起,余额不足,请充值!");}} finally {lock.unlock();}}
}

多线程——java练习题相关推荐

  1. 日常Java练习题(每天进步一点点系列)【含通知】

    提示:好多小伙伴反映,直接看到答案不太好,那我把答案的颜色设置为透明,答案位置还是在题目后面,需要鼠标选中才能看见(操作如下图),同时为了手机端的小伙伴(手机端也可以长按选中查看),我还会把所有答案放 ...

  2. 2016计算机二级java_2016计算机二级JAVA练习题及答案

    2016计算机二级JAVA练习题及答案 21.下列选项中,不能输出100个整数的.是( ). A.for(int i=0;i<100;i++) System.out.println(i); B. ...

  3. 多线程面试题_线程,代码和数据–多线程Java程序实际运行的方式

    多线程面试题 有些事情是您在学术或培训班上没有学到的,经过几年的工作经验后才逐渐了解,然后您才意识到,这是我最想念的那几年,这是非常基本的. 了解多线程Java程序的执行方式就是其中之一. 您肯定已经 ...

  4. java8多线程运行程序_线程,代码和数据–多线程Java程序实际运行的方式

    java8多线程运行程序 有些事情是您在学术或培训班上没有学到的,经过几年的工作经验后才逐渐了解,然后才意识到,这是非常基本的事情,我为什么错过了这么多年. 了解多线程Java程序的执行方式就是其中之 ...

  5. 线程,代码和数据–多线程Java程序实际运行的方式

    有些事情是您在学术或培训班上没有学到的,经过几年的工作经验后才逐渐了解,然后才意识到,这是非常基本的事情,我为什么错过了这么多年. 了解多线程Java程序的执行方式就是其中之一. 您肯定已经听说过线程 ...

  6. 20199计算机二级java答案_计算机二级Java练习题-2019.9

    是不是急于做大量的计算机等级考试题库,却因测试结果不尽人意而心慌不安?不要急!考无忧小编为大家准备了一些二级Java练习题,希望能帮助大家高效复习,轻松通关! 1.下列叙述中正确的是(). A.栈是& ...

  7. 卖票案例 多线程 java 1615387415

    卖票案例 多线程 java 1615387415 解决 线程类 测试类 注意,需要给线程的类添加带参构造方法 在带参构造方法中 调一下父类的带参构造方法 最终结果 每个窗口都卖了一百张票

  8. java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...

    多线程-Java中的对象监视器是什么意思? 为什么要使用这个词? 在阅读有关Java线程的文章时,我经常注意到这样的表达:"当前线程是该对象的监视器的所有者". 我的意思是:线程有 ...

  9. 二级计算机java2017级_2017计算机等级二级考试java练习题及答案

    2017计算机等级二级考试java练习题及答案 JAVA是计算机二级考试的科玛之一,你知道计算机二级考试JAVA科目都考哪些知识吗?为了方便考生备考计算机二级考试JAVA 科目.下面是小编为大家带来的 ...

  10. JAVA练习题库/JAVA面试题库

    JAVA练习题库/JAVA面试题库 Day01 - 环境搭建 编程:在源文件 TestHello.java 中定义两个类,要求如下: ① 第一类为公开类:打印输出 "你好,我们是程序员.&q ...

最新文章

  1. python opencv resize函数_Python OpenCV中的resize()函数的使用
  2. socket编程为什么要选择AF_INET?
  3. 16版.就诊时排队叫号
  4. xml学习4-dtd
  5. linux系统配置脚本,Linux系统配置脚本开机自启
  6. Python- 解决PIP下载安装速度慢
  7. 缓存系列之二:CDN与其他层面缓存
  8. 苹果紧急修复已遭利用的0day
  9. 广东省计算机一级常考选择题,广东省计算机一级选择题
  10. P2114 起床困难综合症
  11. c语言小蜜蜂编程题,小蜜蜂 pascal程序
  12. python武器代码_武器代码总结大全 BO开启秘籍的方法
  13. excel自动化的第一个实用例子(宿舍分饭)
  14. Gym环境分析及构建
  15. Java问题集锦--org.apache.maven.archiver.MavenArchiver.getManifest错误
  16. 【总结】最全1.5万字长文解读7大方向人脸数据集v2.0版,搞计算机视觉怎能不懂人脸...
  17. 传奇服务器需要满足什么条件
  18. 活动创意来源和感想思考
  19. 密西根大学-安娜堡分校计算机科学与技术,密歇根大学安娜堡分校研究生计算机系统专业排名...
  20. java psyounggen_Java 虚拟机

热门文章

  1. effective C++ 条款 48:认识template元编程
  2. 1×1的卷积核在卷积层的作用----网络中的网络
  3. umpy知识点补充:np.vstack()np.hstack()
  4. koa mysql 按钮级权限_Vue要做权限管理该怎么做?控制到按钮级别的权限怎么做?...
  5. Qt中connect的几种写法与遍历ComBox的值
  6. java queue代码_java代码实现顺序队列
  7. python用逗号隔开输出_python思维导图入门第二篇,数据结构,精心整理
  8. 微信小程序项目实例——飞机大战
  9. Java的下载与安装简易教程
  10. 经典Hello Word窗口表示,可视化编程入门。