ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Wait, Notify
    Java 2018. 1. 31. 10:38
    반응형
    public class CommonData {
        
        private String data;

        //synchronized 는 차후 다수의 스레드가 접근할 여지가 있는지 확인 해 볼것
        public synchronized void getData() {
            try {
                //1. 데이터가 있는지 확인
                if(data != null) {
                    //2. 있으면 가져오고 없으면 가져오지 않는다.
                    System.out.println("가져 온 값 : "+data);
                    data = null;//가져온 후 값을 비워 준다.
                }       
                //3. 상대를 깨우고 나는 쉰다.
                notify();
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        public synchronized void setData(String data) { 
            try {
                //1. 값이 있는지 확인
                if(this.data == null) {     
                    System.out.println("넣은 값 : "+data);
                    this.data = data;   //2. 값이 없으면 만들어 준다.     
                }       
                //3. 상대를 깨우고 나는 쉰다.
                notify();
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }       
        }

    }


    public class Producer extends Thread {
        
        private CommonData data;    

        public Producer(CommonData data) {
            this.data = data;
        }

        @Override
        public void run() {
            //데이터를 생산 함
            for(int i=1; i<=5;i++) {
                data.setData("DATA_"+i);
            }

        }   

    }



    public class Consumer extends Thread {
        
        private CommonData data;    

        public Consumer(CommonData data) {
            this.data = data;
        }

        @Override
        public void run() {
            //데이터를 소비 함
            for(int i=1; i<=5;i++) {
                data.getData();
            }
        }   

    }


    public class Main {

        public static void main(String[] args) {
            
            CommonData data = new CommonData();
            
            Producer pro = new Producer(data);
            Consumer con = new Consumer(data);
            pro.start();
            con.start();

        }

    }





    반응형

    'Java' 카테고리의 다른 글

    Java - Deamon Thread, Thread Group  (0) 2018.01.31
    Java - Stop, Interrupt  (0) 2018.01.31
    Java - Thread  (0) 2018.01.30
    Java - 정규표현식  (0) 2018.01.26
    Java - Stack, Queue  (0) 2018.01.25

    댓글

Designed by Tistory.