需求:写一个闹钟程序,闹钟每隔2秒响一次,每次响5声,闹钟响铃后1秒,人将闹钟关闭.
public class People implements Runnable {
private String name;
private Clock c;
public People(String name, Clock c) {
this.name = name;
this.c = c;
}
public void run() {
weakup();
}
public void weakup() {
//睡觉的人时刻等待闹铃响
while(true) {
synchronized(c) {
if(c.isRing()) {
c.setRing(false);
System.out.println("就起来了就起来");
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
c.notify();
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
c.setRing(true);
c.notify();
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Clock1 getC() {
return c;
}
public void setC(Clock1 c) {
this.c = c;
}
}
public class Clock implements Runnable {
private boolean isRing; //判断闹铃是否响过
public void run() {
ring();
}
public void ring() {
//闹铃响5次,每次响3声
for(int i = 0; i < 5; i++) {
synchronized(this) {
if(!isRing) {
isRing = true;
for(int j = 0; j < 3; j++) {
System.out.println("叮叮叮...");
}
try {
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
this.notify();
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}else {
try {
isRing = false;
this.notify();
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public boolean isRing() {
return isRing;
}
public void setRing(boolean isRing) {
this.isRing = isRing;
}
}
public class TestClockPeople {
public static void main(String [] args) {
Clock c = new Clock1();
People p = new People("大姚", c);
Thread ct = new Thread(c);
Thread pt = new Thread(p);
pt.setDaemon(true); //将人设置为守护线程
ct.start();
pt.start();
}
}