크로스오버 실행 데모

2650 단어

약술


20개의 스레드를 생성하여 다음 장면을 시뮬레이션합니다
  • 10개의 스레드로 데이터를 A 데이터베이스에 백업
  • 10개의 스레드로 B 데이터베이스에 데이터 백업
  • 두 가지 작업을 번갈아 실행(A 먼저 실행)
  • 코드


    [DBTools] [데이터 백업 서비스 제공에 사용]
    public class DBTools {
    
        volatile private boolean prevIsA = false;
    
        synchronized public void backupA() {
            try {
                while (prevIsA == true) {
                    wait();
                }
                for (int i = 0; i < 5; i++) {
                    System.out.println("★★★★★");
                }
                prevIsA = true;
                notifyAll();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        synchronized public void backupB() {
            try {
                while (prevIsA == false) {
                    wait();
                }
                for (int i = 0; i < 5; i++) {
                    System.out.println("☆☆☆☆☆");
                }
                prevIsA = false;
                notifyAll();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    [BackupA] [백업 A의 스레드]
    public class BackupA extends Thread {
    
        private DBTools dbtools;
    
        public BackupA(DBTools dbtools) {
            super();
            this.dbtools = dbtools;
        }
    
        @Override
        public void run() {
            dbtools.backupA();
        }
    
    }
    

    [BackupB] [백업 B의 스레드]
    public class BackupB extends Thread {
    
        private DBTools dbtools;
    
        public BackupB(DBTools dbtools) {
            super();
            this.dbtools = dbtools;
        }
    
        @Override
        public void run() {
            dbtools.backupB();
        }
    
    }
    

    【테스트】
    public class Run {
    
        public static void main(String[] args) {
            DBTools dbtools = new DBTools();
            for (int i = 0; i < 10; i++) {
                BackupB output = new BackupB(dbtools);
                output.start();
                BackupA input = new BackupA(dbtools);
                input.start();
            }
        }
    
    }
    

    【결과】
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ★★★★★
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    ☆☆☆☆☆
    

    좋은 웹페이지 즐겨찾기