附上代码段:
public class DemoThread3 { /** * @author 牧羊的伯格女皇 * @param args * 2015-10-15 * 模拟猫和狗的线程,共享房屋中的一桶水。即房屋是线程的目标对象。 * 当水被喝完后 猫和狗 进入死亡状态 */ public static void main(String[] args) { House house = new House(); house.setWaterAmount( 10 ); Thread dog; //用Thread 声明线程 Thread cat; dog = new Thread( house ); // dog 和 cat 的目标对象相同 都是house cat = new Thread( house ); // dog.setName("狗"); // 改变线程名称,使之与参数name相同 cat.setName("猫"); dog.start(); // 启动线程 cat.start(); } } public class House implements Runnable { private int waterAmount; public void setWaterAmount(int waterAmount) { this.waterAmount = waterAmount; } @Override public void run() { while(true){ // currentThread() : 返回对当前正在执行的线程对象的引用。 // getName() 返回该线程的名称。 String name = Thread.currentThread().getName(); if(name.equals("狗")){ System.out.println( name + " 喝水"); waterAmount = waterAmount - 2; }else if( name.equals("猫")){ System.out.println( name +" 喝水"); waterAmount = waterAmount -1; } System.out.println(" 还剩余 : " + waterAmount ); try { Thread.sleep(2000); // 间隔时间 进入中断状态 } catch (InterruptedException e) { //当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常。 e.printStackTrace(); } if( waterAmount <=0 ){ return; } } } }
时间: 2024-10-14 22:18:05