java多线程下如何调用一个共同的内存单元(调用同一个对象)

时间:2023-03-09 07:13:29
java多线程下如何调用一个共同的内存单元(调用同一个对象)
 /*
* 关于线程下共享相同的内存单元(包括代码与数据)
* ,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作。
* 对于Thread(Runnable target)构造方法创建的线程,轮到它来享用CPU资源时。
* 目标对象就会自动调用接口中的run()方法
* */ /* ----------------举例子------------------- */ /*
* 使用Thread类创建两个模拟猫和狗的线程,猫和狗共享房屋中的一桶水,即房屋是线程的目标对象
* ,房屋中的一桶水被猫和狗共享。猫和狗轮流喝水(狗大喝水多,猫小喝水少),当谁被喝尽时,猫和狗进入
* 死亡状态,猫和狗进入死亡状态。猫和狗在轮流喝水的过程中,主动休息片刻(让THread类调用Sleep(int n))
* 进入中断状态),而不是等到被强制中断喝水。
**/
package DEMO; public class EXample12_3 { public static void main( String args [] )
{
House house = new House();
house.setWater();
Thread dog,cat ;
dog = new Thread(house); //dog和cat的目标对象相同
cat = new Thread(house);
dog.setName("狗");
dog.setName("猫");
dog.start();
cat.start();
}
} class House implements Runnable
{
int WaterAmount ; public void setWater(int w)
{
WaterAmount = w;
}
public void run() {
// TODO Auto-generated method stub
while(true)
{
String name =Thread.currentThread().getName();
if(name.equals("狗"))
{
System.out.println(name+"喝水");
WaterAmount =WaterAmount-;
}
else
if(name.equals("猫"))
{
System.out.println(name+"喝水");
WaterAmount=WaterAmount-;
} System.out.println(" 剩 "+WaterAmount);
try {
Thread.sleep(); //间隔时间
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(WaterAmount<=) return ;
}
}
}

java多线程下如何调用一个共同的内存单元(调用同一个对象)java多线程下如何调用一个共同的内存单元(调用同一个对象)

/*
需要注意的是: 一个线程的run方法的执行过程中可能随时被强制中断(特别是对于双核系统的计算机)
*/