Java 멀티스레드 연습, 알람

2983 단어 Java 연습
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();
    }
    
    
}

좋은 웹페이지 즐겨찾기