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方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机)
*/