疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

java多线程数据或代码共用的情况


 

   

  java多线程数据或代码共用的情况

  在这里说的情况是共用数据和代码的情况:

  首先看代码示例:

  public class TestShareThread {

  public static void main(String[] args) {

  String s1 = "会计",s2="出纳";

  Bank bank = new Bank(s1, s2);//生成目标对象,s1和s2是先初始化bank对象里面的name1和name2

  Thread zhang,cheng;

  zhang = new Thread(bank);//bank为共用的目标对象

  cheng = new Thread(bank);//在两个线程中共用了同一个对象的引用及bank,也即是:当zhang修改bank的内容

  //时cheng也受到了影响,反过来也是一样的。

  zhang.setName(s1);//为线程取名字在这里设置的s1既是zhang这个线程的名字。

  cheng.setName(s2);

  bank.setMoney(180);

  System.out.println("开始");

  cheng.start();

  zhang.start();

  }

  }

  class Bank implements Runnable {

  private int money =0;

  String name1 ,name2;

  public Bank(String s1,String s2) {

  name1 = s1;

  name2 = s2;

  }

  public void setMoney(int money) {

  this.money = money;

  }

  @Override

  public void run() {

  while(true){

  money = money -10;

  if(Thread.currentThread().getName().equals(name1)){

  System.out.println("我是"+name1+"现在有"+money+"元");

  if(money<=100){

  System.out.println(name1+"进入死亡状态");

  return;

  }

  }else if(Thread.currentThread().getName().equals(name2)){

  System.out.println("我是"+name2+"现在有"+money+"元");

  if(money<=60){

  System.out.println(name2+"进入死亡状态");

  return;

  }

  }

  try{Thread.sleep(800);}

  catch(InterruptedException e){

  }

  }

  }

  }