[Head First Java] - 线程共享数据问题
参考 - P507
1. 说明
- 两个线程共享同一份数据,每次使用数据时,需要先判断其是否在合理范围
- 每次使用数据完毕使用
Thread.sleep
函数让线程阻塞
2.代码
class BankAccount {private int balance = 100;public int getBalance() {return balance;}public void withdraw(int amount) {balance = balance - amount;}
}public class RyanAndMonicaJob implements Runnable {private BankAccount account = new BankAccount();public static void main (String[] args) {RyanAndMonicaJob theJob = new RyanAndMonicaJob();Thread one = new Thread(theJob);Thread two = new Thread(theJob);one.setName("Ryan");two.setName("Monica");one.start();two.start();}public void run() {for (int x = 0; x < 10; x++) {makeWithdrawal(10);if(account.getBalance() < 0) {System.out.println("Overdrawn!");}}}private void makeWithdrawal(int amount) {String currentThread = Thread.currentThread().getName();if(account.getBalance() >= amount) {System.out.println(currentThread + "is about to withdraw");try{System.out.println(currentThread + " is going to sleep");Thread.sleep(500);} catch(InterruptedException ex) {ex.printStackTrace();}System.out.println(currentThread + " woke up.");account.withdraw(amount);System.out.println(currentThread + " completes the withdrawl");} else {System.out.println("Sorry, not enough for " + currentThread);}}
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/20201113004828229.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpYW5vOTQyNQ==,size_16,color_FFFFFF,t_70#pic_center)
[Head First Java] - 线程共享数据问题相关推荐
- java 多线程共享数据_Java多线程学习:多个线程间共享数据
多个线程访问共享对象和数据的方式有两种情况: 1.每个线程执行的代码相同,例如,卖票:多个窗口同时卖这100张票,这100张票需要多个线程共享. 2.每个线程执行的代码不同,例如:设计四个线程,其中两 ...
- java 多线程 共享数据_JAVA多线程提高四:多个线程之间共享数据的方式
多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...
- C++11 多线程线程共享数据
共享数据的问题 这些在操作系统中都有详细的介绍,可以回顾操作系统课程..很典型的就是数据竞争问题. 互斥量保护数据 最原始的方式:使用std::mutex创建互斥量,使用成员lock()加锁,使用成员 ...
- java 多个线程共享数据_【java并发】多个线程间共享数据
先看1个多线程间同享数据的问题: 设计4个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显触及到了线程间通数据的同享,4个线程同享1个data,共同操作1 ...
- 并发编程02-什么是线程安全以及Java虚拟机中哪些数据是线程共享的,那些是线程私有的
线程安全的本质 什么是线程安全 要说什么是线程安全,那么我们看看生活中例子吧. 场景1:王菲要来西安体育场开演唱会,这个体育场规模不是很大,能容纳1000个人,于是准备了1000张票,后天中午12点在 ...
- 写java线程导致电脑内存不足_如何写出让java虚拟机发生内存溢出异常OutOfMemoryError的代码...
程序小白在写代码的过程中,经常会不经意间写出发生内存溢出异常的代码.很多时候这类异常如何产生的都傻傻弄不清楚,如果能故意写出让jvm发生内存溢出的代码,有时候看来也并非一件容易的事.最近通过学习< ...
- java线程基础_Java多线程基础
前言 在我们工作和学习的过程中,Java线程我们或多或少的都会用到,但是在使用的过程上并不是很顺利,会遇到各种各样的坑,这里我通过讲解Thread类中的核心方法,以求重点掌握以下关键技术点: 线程的启 ...
- java线程怎么用_Java多线程基本使用
一.概念 1.进程 1.1进程:是一个正在进行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元. 1.2线程:就是进程中一个独立的控制单元,线程在控制着进程的执行,一 ...
- java线程 锁_Java多线程(二) 多线程的锁机制
当两条线程同时访问一个类的时候,可能会带来一些问题.并发线程重入可能会带来内存泄漏.程序不可控等等.不管是线程间的通讯还是线程共享数据都需要使用Java的锁机制控制并发代码产生的问题.本篇总结主要著名 ...
最新文章
- ASP.NET重用代码技术 - 用户控件技术
- reindex-maven 私服(nexus)架设以及项目管理中遇到的问题及解决方案(updating)
- 的主机名_Mac教程——修改mac 下主机名、电脑名、局域网主机名
- 百度java验证码不显示不出来,Java-使用百度链接时,遇到无法弹出用户登录框的问题...
- 有逼格的产品经理都用什么样的杯子?
- hadoop 2.6 伪分布式的安装
- idea 设置默认 jdk
- html画圣诞树—动态效果展示【炫酷合集 免费获取源码】
- 计算机网络传媒介,2.3 网络传输媒介 - 第2章 计算机网络硬件基础 - 《计算机网络技术与应用》 - 倾心驿站 - 恰教程网...
- Centos7 firewall防火墙常用配置
- 《Fortran 95 程序设计》阅读笔记三
- python编码无法使用turtle库_使用Turtle库教Python
- 代码检查技术Checkstyle与p3c调研
- laravel 发送邮件
- 【Git学习】解决GitLab内存消耗大的问题
- 【Lilishop商城】No2-1.确定项目结构和数据结构(用户、商品、订单、促销等模块)
- QPushButton按钮互斥效果
- 在Matlab图片里输入数学公式、符号和希腊字母的方法
- 用Go语言编程的利与弊
- 黄浩老师cpp平时作业(十一)矩阵乘法矩形类读写文件与结构体
热门文章
- php导出照片,Laravel使用 Laravel Excel文件导出图片功能
- lan8720a自协商启动_紫金矿业2020届校招海外9站全面启动(面向全专业)
- applicationproperties不是小叶子_三角梅整株叶子发黄从这里找原因,早解决早生长!...
- 强化学习——Qlearning
- Python函数之 ceil, floor,round
- 深度学习笔记(待续)
- 对flex深入研究一点
- 项目开发中的自我总结
- Ansible基础概述
- android是32-bit系统还是64-bit系统