老师给了个题目
模拟银行系统对存取款的处理。假设存款人A和取款人B在同一时间对同一帐号进行操作帐号本身有1000元,A进行了2次存款操作,第一次存入200元,第二次存入400元与此同时,B进行了2次取款操作,第一次取100元,第二次取50元。如果A和B单独操作,对A帐号:1000+200+400=1600元。对B帐号:100-100-50=850元银行系统必须保证在同一时间内只有一个人可以对帐号进行操作,需要同步。
感觉很简单,但是做出来感觉很怪,怎样才算让A和B同时进行操作。还有Runnable接口和Thread类中的Run方法有什么意义?
以下是本人写的代码,高手们帮我纠正纠正!!
public class Program2 extends Thread/*这个是账户类*/
{
int money=1000;
Object ob=null;
public Program2()
{
ob=new Object();
System.out.println("此时账户还有:"+this.money+"元");
}
public void getMoney(int mount)
{
synchronized(ob)
{
this.money=this.money-mount;
}
}
public void saveMoney(int mount)
{
synchronized(ob)
{
this.money=this.money+mount;
}
}
public int yuer()
{
return this.money;
}
public static void main(String[] args)
{
Program2 count=new Program2();
count.start();
Person A=new Person(count,"A");
Person B=new Person(count,"B");
A.start();
B.start();
A.saveMoney(200);
A.saveMoney(400);
B.getMoney(100);
B.getMoney(50);
System.out.println(A.isAlive());
System.out.println(B.isAlive());
}
}
class Person extends Thread
{
Program2 count=null;
String name=null;
public Person(Program2 count,String name)
{
this.count=count;
this.name=name;
}
public void getMoney(int mount)
{
if(count.yuer()<mount)
{
System.out.println("对不起,余额不足");
System.out.println("此时账户还有:"+count.yuer()+"元");
return;
}
count.getMoney(mount);
System.out.println(this.name+"取出"+mount+"元");
System.out.println("此时账户还有:"+count.yuer()+"元");
}
public void saveMoney(int mount)
{
count.saveMoney(mount);
System.out.println(this.name+"存入"+mount+"元");
System.out.println("此时账户还有:"+count.yuer()+"元");
}
}
模拟银行系统对存取款的处理。假设存款人A和取款人B在同一时间对同一帐号进行操作帐号本身有1000元,A进行了2次存款操作,第一次存入200元,第二次存入400元与此同时,B进行了2次取款操作,第一次取100元,第二次取50元。如果A和B单独操作,对A帐号:1000+200+400=1600元。对B帐号:100-100-50=850元银行系统必须保证在同一时间内只有一个人可以对帐号进行操作,需要同步。
感觉很简单,但是做出来感觉很怪,怎样才算让A和B同时进行操作。还有Runnable接口和Thread类中的Run方法有什么意义?
以下是本人写的代码,高手们帮我纠正纠正!!
public class Program2 extends Thread/*这个是账户类*/
{
int money=1000;
Object ob=null;
public Program2()
{
ob=new Object();
System.out.println("此时账户还有:"+this.money+"元");
}
public void getMoney(int mount)
{
synchronized(ob)
{
this.money=this.money-mount;
}
}
public void saveMoney(int mount)
{
synchronized(ob)
{
this.money=this.money+mount;
}
}
public int yuer()
{
return this.money;
}
public static void main(String[] args)
{
Program2 count=new Program2();
count.start();
Person A=new Person(count,"A");
Person B=new Person(count,"B");
A.start();
B.start();
A.saveMoney(200);
A.saveMoney(400);
B.getMoney(100);
B.getMoney(50);
System.out.println(A.isAlive());
System.out.println(B.isAlive());
}
}
class Person extends Thread
{
Program2 count=null;
String name=null;
public Person(Program2 count,String name)
{
this.count=count;
this.name=name;
}
public void getMoney(int mount)
{
if(count.yuer()<mount)
{
System.out.println("对不起,余额不足");
System.out.println("此时账户还有:"+count.yuer()+"元");
return;
}
count.getMoney(mount);
System.out.println(this.name+"取出"+mount+"元");
System.out.println("此时账户还有:"+count.yuer()+"元");
}
public void saveMoney(int mount)
{
count.saveMoney(mount);
System.out.println(this.name+"存入"+mount+"元");
System.out.println("此时账户还有:"+count.yuer()+"元");
}
}
public class Program2
//extends Thread/*这个是账户类*/
{ int money = 1000; Object ob = null; public Program2() {
ob = new Object(); System.out.println("此时账户还有:" + this.money + "元");
} public void getMoney(int mount) {
synchronized (ob) { this.money = this.money - mount; }
} public void saveMoney(int mount) {
synchronized (ob) { this.money = this.money + mount; }
} public int yuer() {
return this.money;
} public static void main(String[] args) {
Program2 count = new Program2();
// count.start();
Person A = new Person(count, "A");
Person B = new Person(count, "B");
A.start();
B.start();
/* A.saveMoney(200);
A.saveMoney(400);
B.getMoney(100);
B.getMoney(50);*/
System.out.println(A.isAlive());
System.out.println(B.isAlive()); }}class Person extends Thread {
Program2 count = null; String name = null; public Person(Program2 count, String name) {
this.count = count;
this.name = name; } public void getMoney(int mount) {
if (count.yuer() < mount) {
System.out.println("对不起,余额不足");
System.out.println("此时账户还有:" + count.yuer() + "元"); return;
}
count.getMoney(mount); System.out.println(this.name + "取出" + mount + "元");
System.out.println("此时账户还有:" + count.yuer() + "元");
} public void saveMoney(int mount) {
count.saveMoney(mount);
System.out.println(this.name + "存入" + mount + "元");
System.out.println("此时账户还有:" + count.yuer() + "元");
}
public void run(){
if(this.name.equals("A")){
saveMoney(200);
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
saveMoney(400);
}else if(this.name.equals("B")){
getMoney(100);
try {
Thread.currentThread().sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
getMoney(50);
}
}
}账户类是一个被多个线程共享的类,没必要是Thread类
Person类需重写run方法,具体看代码!