본문 바로가기

JAVA

스레드(Thread) 기본 실습 -synchronized(동기화)

 


//synchronized

public class ShareData {

        //공유하는 자원

        int data;

       

        public synchronized void up(String name){    //synchronized 메소드 이름 앞에 선언

               System.out.print(name + " " + data);

               data++;

               System.out.println(" " + data + " 증가시킴");

        }

       

        public synchronized void down(String name){  //synchronized 선언 

               System.out.print(name + " " + data);

               data--;

               System.out.println(" " + data + " 감소시킴");

        }

}


 

 

 

 

 


public class UpThread extends Thread {

        ShareData data;

        String name;

              

        public UpThread(ShareData data, String name) {

               this.data = data;

               this.name = name;

        }

 

        @Override

        public void run() {

               for(int i = 0 ; i <4 ; i++){

                       try {

                              Thread.sleep(500);

                       } catch (InterruptedException e) {

                       }

               data.up(name);

               }

                      

        }

}


 

 

 

 

 


public class DownThread extends Thread {

        ShareData data;

        String name;

              

        public DownThread(ShareData data, String name) {

               this.data = data;

               this.name = name;

        }

        @Override

        public void run() {

               for(int i = 0 ; i <4 ; i++){

                       try {

                              Thread.sleep(500);

                       } catch (InterruptedException e) {

                       }

               data.down(name);

               }

                      

        }

}


 

 

 

 

 

main 클래스


public class ThreadMain {

 

        public static void main(String[] args) {

               ShareData data = new ShareData();

              

               UpThread up = new UpThread(data, "UP");

               DownThread down = new DownThread(data, "DOWN");

              

               up.start();

               down.start();

              

        }

}