synchronized keyword DEMO
2015-07-30 10:32
369 查看
package HeadFirstJava; class BankAccount { private int balance = 100; public int getBalance() { return balance; } public void withdraw(int amount) { balance = balance - amount; } } class BobAndMonica implements Runnable { private BankAccount account = new BankAccount(); public static void main(String[] args) { BobAndMonica theJob = new BobAndMonica(); Thread one = new Thread(theJob); Thread two = new Thread(theJob); one.setName("Bob"); two.setName("Monica"); one.start(); two.start(); } @Override public void run() { // TODO Auto-generated method stub for (int x = 0; x < 10; x++) { makeWithdrawl(10); } if (account.getBalance() < 0) { System.out.println("Overdrawn"); } } private synchronized void makeWithdrawl(int amount) { if (account.getBalance() >= amount) { System.out.println(Thread.currentThread().getName() + " is about to withdraw"); try { System.out.println(Thread.currentThread().getName() + " is going to sleep"); Thread.sleep(500); } catch(InterruptedException ex) {ex.printStackTrace();} System.out.println(Thread.currentThread().getName() + " woke up."); account.withdraw(amount); System.out.println(Thread.currentThread().getName() + " completes the withdrawl"); } else { System.out.println("Sorry, not enough for " + Thread.currentThread().getName()); } } }
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Monica is about to withdraw
Monica is going to sleep
Monica woke up.
Monica completes the withdrawl
Bob is about to withdraw
Bob is going to sleep
Bob woke up.
Bob completes the withdrawl
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Monica
Sorry, not enough for Bob
Sorry, not enough for Bob
Sorry, not enough for Bob
Sorry, not enough for Bob
Sorry, not enough for Bob
相关文章推荐
- POJ 3784 Running Median
- 管理目录
- Ios开发之 -- js和ios的交互
- mongo 学习笔记
- Xcode 中搜索任何条件文本
- Android中moveTo、lineTo、quadTo、cubicTo、arcTo详解(实例)
- OC特有语法—常用结构体
- JS 添加收藏 设为首页功能
- CodeForce 424C Magic Formulas
- js中运算符"=="与"==="的区别
- DC,CDC和HDC理解
- svchost进程的浅析
- iOS 视图封装及适配
- poj 2778 AC自动机+快速幂(DNA Sequence)
- NBUT 1914 asd的甩锅计划(最小生成树)
- HDU 5316 Magician (线段树)
- Ubuntu升级磁盘空间不足时清理boot分区
- Box of Bricks
- ActiveMQ基本配置
- 如何查看class文件的jdk版本