题目:

java实验8(图1)

实验代码:

import java.lang.*;

class Result{  //创建该类的3个实例传入各自线程,用来存储各人的存取总和。
		String name;
		int inputm=0;
		int outputm=0;
		public Result(String name){
			this.name=name;
        }
}


class put{
	static int money=0;
	static int flag=0;
	synchronized static void input(Result res,int moneys){
  	  int temp=money;
  	  money+=moneys;
  	  res.inputm+=moneys;
  	  System.out.println("。。。。。");
  	  System.out.println(res.name+"   存入"+moneys+"   成功    操作前金额"+temp+"   操作后金额"+money);
    }
    synchronized static void output(Result res,int moneys){
  	  int temp=money;
  	  if(money>=moneys){
  		  money-=moneys;
  		  res.outputm+=moneys;
  		  System.out.println("。。。。。");
  		  System.out.println(res.name+"   取出"+moneys+"   成功    操作前金额"+temp+"   操作后金额"+money);
  	  }else{
  		  System.out.println("。。。。。");
  		  System.out.println(res.name+"   取出"+moneys+"   失败    操作前金额"+temp+"   操作后金额"+money);
  	  }
    }
    synchronized static void Flag(){
    	flag++;
    }
}


class Father implements Runnable{
    private Result father;
    public Father(Result father){
    	this.father=father;
    }
	public void run(){
	  put.input(father,1000);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(father,300);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(father,200);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.input(father,800);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.Flag();
	}
}

class Mather implements Runnable{
    private Result mather;
    public Mather(Result mather){
    	this.mather=mather;
    }
	public void run(){
	  put.output(mather,100);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.input(mather,200);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(mather,500);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(mather,100);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.Flag();
	}
}

class Chiled implements Runnable{
    private Result chiled;
    public Chiled(Result chiled){
    	this.chiled=chiled;
    }
	public void run(){
	  put.output(chiled,400);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(chiled,600);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(chiled,100);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.output(chiled,800);
  	  try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
  	  put.Flag();
	}
}


public class lixiao8 implements Runnable{
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		Result father=new Result("父亲");
		Result mather=new Result("母亲");
		Result chiled=new Result("儿子");
		
        Father A=new Father(father);
        Mather B=new Mather(mather);
        Chiled C=new Chiled(chiled);
        
        Thread tA=new Thread(A);
        Thread tB=new Thread(B);
        Thread tC=new Thread(C);
        
        tA.start();
        tB.start();
        tC.start();
        
		while(put.flag<3){
        	try {
        		Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			if(put.flag==3) break;
        }
		System.out.println("");
		System.out.println("");
		System.out.println(father.name+"  共存入"+father.inputm+"  实际取出"+father.outputm);
		System.out.println(mather.name+"  共存入"+mather.inputm+"  实际取出"+mather.outputm);
		System.out.println(chiled.name+"  共存入"+chiled.inputm+"  实际取出"+chiled.outputm);
		System.out.println("");
		System.out.println("");
		System.out.println("卡中余额:"+put.money);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		lixiao8 Main=new lixiao8();
		Thread M=new Thread(Main);
		M.start();
		
		// TODO Auto-generated method stub
	}

	

}

思考:

         我写的并没有按照文档提示来做,而是把所有代码分成好几个类,这样会使代码看起来比较简洁。当然如果不喜欢这种风格,大可以全部写在主线程内。