那个银行存款取款的那个很经典的银行存款取款的例子package com;public class TestThreadBank { private String name; //name
private double balance; //balance
public TestThreadBank(String name){
this.name=name;
this.balance=0;
}
public String getName(){
return name;
}
public double balance(){
return balance;
}
public void put(double value) //存款操作
{
if(value>0){
this.balance+=value;
}
}
public double get(double value){//取款操作
if(value>0){
if(value<this.balance)
this.balance-=value;
else{
value=this.balance;
this.balance=0;
}
return value;
}
return 0;
}
public static void main(String args[]){//主方法
TestThreadBank bank=new TestThreadBank("wang");
//TestThreadBank bank2=new TestThreadBank("xiang");
(new Save(bank, 100)).start();
(new Save(bank, 200)).start();
(new Fetch(bank, 300)).start();
}
}class Save extends Thread{
private TestThreadBank countBank;
private double value;
public Save(TestThreadBank A,double value)//存款类
{
this.countBank=A;
this.value=value;
}
public void run(){
synchronized (this.countBank) {
double howmach=this.countBank.balance();
this.countBank.put(value);
try{
sleep(1);
}catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println(this.countBank.getName()+"账户:现有"+howmach+"存入"+this.value+"余额"+this.countBank.balance());
}
}
}
class Fetch extends Thread{
private TestThreadBank countBank;
private double value;
public Fetch(TestThreadBank A1,double value){
this.countBank=A1;
this.value=value;
}
public void run(){
synchronized (this.countBank) {
double howmatch=this.countBank.balance();
try {
sleep(1);
} catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println(this.countBank.getName()+"账户:现有"+howmatch+"取走"+this.countBank.get(value)+"余额"+this.countBank.balance());
}
}
}
在这个里面书上介绍说只要给临界资源加上同步锁,那么就能实现先存100 再存200 再取300 的效果
但是 但是我PC上就是不按照顺序执行 或者说我创建的三个线程不是按照创建的时候来执行的
很困惑 希望各位大牛能给我解释一下
private double balance; //balance
public TestThreadBank(String name){
this.name=name;
this.balance=0;
}
public String getName(){
return name;
}
public double balance(){
return balance;
}
public void put(double value) //存款操作
{
if(value>0){
this.balance+=value;
}
}
public double get(double value){//取款操作
if(value>0){
if(value<this.balance)
this.balance-=value;
else{
value=this.balance;
this.balance=0;
}
return value;
}
return 0;
}
public static void main(String args[]){//主方法
TestThreadBank bank=new TestThreadBank("wang");
//TestThreadBank bank2=new TestThreadBank("xiang");
(new Save(bank, 100)).start();
(new Save(bank, 200)).start();
(new Fetch(bank, 300)).start();
}
}class Save extends Thread{
private TestThreadBank countBank;
private double value;
public Save(TestThreadBank A,double value)//存款类
{
this.countBank=A;
this.value=value;
}
public void run(){
synchronized (this.countBank) {
double howmach=this.countBank.balance();
this.countBank.put(value);
try{
sleep(1);
}catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println(this.countBank.getName()+"账户:现有"+howmach+"存入"+this.value+"余额"+this.countBank.balance());
}
}
}
class Fetch extends Thread{
private TestThreadBank countBank;
private double value;
public Fetch(TestThreadBank A1,double value){
this.countBank=A1;
this.value=value;
}
public void run(){
synchronized (this.countBank) {
double howmatch=this.countBank.balance();
try {
sleep(1);
} catch (InterruptedException e) {
// TODO: handle exception
}
System.out.println(this.countBank.getName()+"账户:现有"+howmatch+"取走"+this.countBank.get(value)+"余额"+this.countBank.balance());
}
}
}
在这个里面书上介绍说只要给临界资源加上同步锁,那么就能实现先存100 再存200 再取300 的效果
但是 但是我PC上就是不按照顺序执行 或者说我创建的三个线程不是按照创建的时候来执行的
很困惑 希望各位大牛能给我解释一下
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货