寫了一個小鬧鐘
阿新 • • 發佈:2019-01-30
package com.konghao.test; public class Alarm implements Runnable { private boolean isWork; //鬧鐘是否開啟 public Alarm() { super(); this.isWork = false; //沒在響; } public boolean isWork() { return isWork; } public void setWork(boolean isWork) { this.isWork = isWork; } //鬧方法 public void work(){ synchronized (this) { //鬧鐘執行時,列印字元 if(isWork){ System.out.println("it's time for up!"); this.notify(); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } @Override public void run() { for (int i = 0; i < 10; i++) { this.setWork(true); work(); } } } package com.konghao.test; public class User implements Runnable{ private String name; private Alarm myAlarm; public User(String name, Alarm myAlarm) { super(); this.name = name; this.myAlarm = myAlarm; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Alarm getMyAlarm() { return myAlarm; } public void setMyAlarm(Alarm myAlarm) { this.myAlarm = myAlarm; } public void stopAlarm(){ synchronized (myAlarm) { if(myAlarm.isWork()){ myAlarm.setWork(false); System.out.println(this.name+"按了鬧鐘!"); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } finally{ myAlarm.notify(); try { myAlarm.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ try { myAlarm.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } @Override public void run() { while(true){ stopAlarm(); } } } package com.konghao.test; public class Test { public static void main(String[] args) { Alarm al = new Alarm(); User u = new User("小胖",al); Thread ut = new Thread(u); Thread at = new Thread(al); ut.setDaemon(true); ut.start(); at.start(); } }