【发布时间】:2014-05-15 16:05:34
【问题描述】:
我试图创建这样的竞争条件。
class Bankaccount {
private int balance=101;
public int getBalance(){
return balance;
}
public void withdraw(int i){
balance=balance-i;
System.out.println("..."+balance);
}
}
public class Job implements Runnable{
Bankaccount b=new Bankaccount();
public void run(){
if(b.getBalance()>100){
System.out.println("the balanced ammount is"+b.getBalance());
/*try{
Thread.sleep(9000);
}
catch(Exception e){
}*/
makeWithdrawl(100);
}
}
public void makeWithdrawl(int ammount){
b.withdraw(ammount);
System.out.println(b.getBalance());
}
public static void main(String[] args) {
Job x=new Job();
Job y=new Job();
Thread t1=new Thread(x);
Thread t2=new Thread(y);
t1.start();
t2.start();
}
}
我得到输出: 余额为101 ...1 1 余额为101 ...1
我预计它会是负数,因为两次提款发生在 100 美元
这里缺少什么?提前致谢
【问题讨论】:
-
您没有给线程足够的时间来应对竞争条件。它也可能随时发生。
-
println() 语句也会大大减慢速度。
-
每个线程(作业)都使用自己的
BankAccount实例,所以我看不到任何方法可以在这里创建竞争条件。
标签: java multithreading