level 2
艹_情殇灬
楼主
Bank类
public class Bank {
static int money = 1000;
Object lock = "a";
public void ATM(int money) {
synchronized(lock)
{
if(money == 100)
{
Bank.money -= money;
System.out.println("A取走100,剩余" + Bank.money);
}
if(money == 200)
{
Bank.money -= money;
System.out.println("B取走200,剩余" + Bank.money);
}
}
}
}
PersonA类
public class PersonA extends Thread {
Bank bank;
public PersonA(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
while (bank.money >= 100) {
bank.ATM(100);
}
}
}
PersonB类
public class PersonB extends Thread{
Bank bank;
public PersonB(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
while(bank.money >= 200) {
bank.ATM(200);
}
}
}
测试类
public class Demo {
public static void main(String[] args) {
Bank bank = new Bank();
Thread a = new PersonA(bank);
Thread b = new PersonB(bank);
a.start();
b.start();
}
}
输出结果:
B取走200,剩余800
B取走200,剩余600
B取走200,剩余400
B取走200,剩余200
B取走200,剩余0
A取走100,剩余-100
为什么最后Bank中money都为0了,A还会在取走一次钱??
2018年09月29日 03点09分
1
public class Bank {
static int money = 1000;
Object lock = "a";
public void ATM(int money) {
synchronized(lock)
{
if(money == 100)
{
Bank.money -= money;
System.out.println("A取走100,剩余" + Bank.money);
}
if(money == 200)
{
Bank.money -= money;
System.out.println("B取走200,剩余" + Bank.money);
}
}
}
}
PersonA类
public class PersonA extends Thread {
Bank bank;
public PersonA(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
while (bank.money >= 100) {
bank.ATM(100);
}
}
}
PersonB类
public class PersonB extends Thread{
Bank bank;
public PersonB(Bank bank) {
this.bank = bank;
}
@Override
public void run() {
while(bank.money >= 200) {
bank.ATM(200);
}
}
}
测试类
public class Demo {
public static void main(String[] args) {
Bank bank = new Bank();
Thread a = new PersonA(bank);
Thread b = new PersonB(bank);
a.start();
b.start();
}
}
输出结果:
B取走200,剩余800
B取走200,剩余600
B取走200,剩余400
B取走200,剩余200
B取走200,剩余0
A取走100,剩余-100
为什么最后Bank中money都为0了,A还会在取走一次钱??