首页 > 代码库 > java多线程下如何调用一个共同的内存单元(调用同一个对象)
java多线程下如何调用一个共同的内存单元(调用同一个对象)
1 /* 2 * 关于线程下共享相同的内存单元(包括代码与数据) 3 * ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作。 4 * 对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时。 5 * 目标对象就会自动调用接口中的run()方法 6 * */ 7 8 /* ----------------举例子------------------- */ 9 10 /* 11 * 使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶水,即房屋是线程的目标对象12 * ,房屋中的一桶水被猫和狗共享。猫和狗轮流喝水(狗大喝水多,猫小喝水少),当谁被喝尽时,猫和狗进入13 * 死亡状态,猫和狗进入死亡状态。猫和狗在轮流喝水的过程中,主动休息片刻(让THread类调用Sleep(int n))14 * 进入中断状态),而不是等到被强制中断喝水。15 **/16 package DEMO;17 18 public class EXample12_3 {19 20 public static void main( String args [] )21 {22 House house = new House();23 house.setWater(10);24 Thread dog,cat ;25 dog = new Thread(house); //dog和cat的目标对象相同26 cat = new Thread(house);27 dog.setName("狗");28 dog.setName("猫");29 dog.start();30 cat.start();31 } 32 }33 34 class House implements Runnable35 {36 int WaterAmount ; 37 38 public void setWater(int w)39 {40 WaterAmount = w; 41 }42 public void run() {43 // TODO Auto-generated method stub44 while(true)45 {46 String name =Thread.currentThread().getName();47 if(name.equals("狗"))48 {49 System.out.println(name+"喝水");50 WaterAmount =WaterAmount-2;51 }52 else53 if(name.equals("猫"))54 {55 System.out.println(name+"喝水");56 WaterAmount=WaterAmount-1;57 }58 59 System.out.println(" 剩 "+WaterAmount);60 try {61 Thread.sleep(2000); //间隔时间62 } catch (InterruptedException e) {63 // TODO Auto-generated catch block64 e.printStackTrace();65 }66 if(WaterAmount<=0) return ;67 }68 }69 }
/*需要注意的是: 一个线程的run方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机)*/
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。