以同一张银行卡取钱为例,演示同步多线程方法
来源:互联网 发布:php自动跳转url 编辑:程序博客网 时间:2024/05/07 12:05
public class BankDemo {
public static void main(String[] args) {
Bank bank=new Bank();
BankThread p1=new BankThread(bank);
p1.start();//柜台取钱
BankThread p2=new BankThread(bank);
p2.start();//ATM机上取钱
}
}
class Bank{
private int money=500;
/*取钱的方法,返回取钱的数目
当一个线程去调用同步方法的时候,这个线程就获取了当前的锁
其他线程当调用同步方法的时候只能等待,因为无法获取对象的锁
只有等第一个线程释放对象的锁方可进入。*/
public synchronized int getMoney(int number) {
if (number<0) {
return -1;
}else if (money<0) {
return -2;
}else if (number -money>0) {
return -3;
}else {
try {
Thread .sleep(1000);//模拟取钱时间
} catch (InterruptedException e) {
e.printStackTrace();
}
money-=number;
System.out.println("余额:"+money);
}
return number;//返回具体取钱数目。
}
}
class BankThread extends Thread{
private Bank bank=null;
public BankThread (Bank bank) {
this.bank=bank;
}
@Override
public void run() {
System.out.println("取钱:"+bank.getMoney(400));
//返回取钱取了多少
}
}
//使用同步方法第二种方法
class Bank1{
private int money=500;
/*同步对象可以是任意一种即object类,*/
private Object obj=new Object();
/*取钱的方法,返回取钱的数目
当一个线程去调用同步方法的时候,这个线程就获取了当前的锁
其他线程当调用同步方法的时候只能等待,因为无法获取对象的锁
只有等第一个线程释放对象的锁方可进入。*/
public int getMoney(int number) {
synchronized(obj){
if (number<0) {
return -1;
}else if (money<0) {
return -2;
}else if (number -money>0) {
return -3;
}else {
try {
Thread .sleep(1000);//模拟取钱时间
} catch (InterruptedException e) {
e.printStackTrace();
}
money-=number;
System.out.println("余额:"+money);
}
return number;//返回具体取钱数目。
}
}
}
0 0
- 以同一张银行卡取钱为例,演示同步多线程方法
- 以标准体重计算器为例演示
- Event多线程同步演示
- 以GNU的hello为例演示制作rpm包的方法
- 单线程、多线程、多进程、协程比较,以爬取新浪军事历史为例
- 关于多线程同步的几点疑问(以CRITICAL_SECTION 为例)
- java基础入门-多线程同步浅析-以银行转账为样例
- 夫妻银行卡取钱之初识单例模式
- 深入浅出,以咖啡店为例演示Web应用程序扩展
- 深入浅出,以咖啡店为例演示Web应用程序扩展
- 深入浅出,以咖啡店为例演示Web应用程序扩展
- 以咖啡店为例演示Web应用程序扩展
- 深入浅出,以咖啡店为例演示Web应用程序扩展
- 深入浅出,以咖啡店为例演示Web应用程序扩展
- 以咖啡店为例演示Web应用程序扩展
- 深入浅出,以咖啡店为例演示Web应用程序扩展
- VisualStudio-以修改注释快捷键为例演示修改快捷键
- JAVA多线程与单列模式--同步演示
- 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤
- C指针
- python爬取网站图片
- java中重载与重写的区别
- 理解之软件需求说明书
- 以同一张银行卡取钱为例,演示同步多线程方法
- 破窗理论与中学课堂
- Constructing module maps for integrated analysis of heterogeneous biological networks
- C++学习笔记54——函数模板
- 【BZOJ1095】【ZJOI2007】捉迷藏 括号序列+线段树维护
- JMS探讨二 ActiveMq
- Linux使用RPM方式安装MySQL
- C语言宏定义和宏定义函数
- 使用多线程方法生成一个死锁程序