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 Runnable 35 { 36 int WaterAmount ; 37 38 public void setWater(int w) 39 { 40 WaterAmount = w; 41 } 42 public void run() { 43 // TODO Auto-generated method stub 44 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 else 53 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 block 64 e.printStackTrace(); 65 } 66 if(WaterAmount<=0) return ; 67 } 68 } 69 }
/* 需要注意的是: 一个线程的run方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机) */
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。