참조 티켓 티켓 윈도우 시스템 DAY17-190807
1. 다중 스레드 단일 작업 (각 스레드는 오직 하나의 작업 매칭이) - 세 티켓 윈도우가 티켓 시스템을 가정 (만 자신을 판매 별도로 각 티켓 (창 50 티켓 150 개 티켓의 객실을 선택할 수 있습니다) 창 50 티켓) (2에 비해 균형 판매 티켓은, 자신의 투표 동일한 확률을) 판매
2. 작업 다중 스레드 (작업을 약탈하는 독점적 경쟁에서 여러 스레드가 될 수있는 자원) - 티켓 시스템 (티켓 시스템 (150 개) 티켓의 총) 가정 티켓 창 1에 비해 티켓을 판매하는 세 가지 공동 독점적 경쟁 (있다, 임의 잡아 티켓은 투표 반드시 동일하지 확률) 판매
. (1 개) 공용 클래스 에서 Test1 { 2 공용 정적 무효 메인 (문자열 []에 args) { . 3 //는 각각의 스레드가 하나의 태스크가 할당되어있는 것으로, 우리는 병렬 처리를 설명한다. 이어서 달성 할 스레드 클래스 상속을 사용하여 4. // MyThread myThread1를 MyThread 새로운 새 = () . 5 // MyThread myThread2 MyThread 새로운 새 = () . 6 // MyThread myThread3 MyThread 새로운 새 = () . 7 // . 8 // myThread1.start (); 9 // myThread2.start (); 10 // myThread3.start (); 11 // 우리는 공통점을 설명한다고 가정은 작업 경쟁력을 병렬 처리합니다. 그래야의 Runnable 인터페이스 구현 (12) TicketWindows ticketWindows는 = 새로운 TicketWindows (); 13 스레드 thread1 = 새로운 스레드 (ticketWindows "窗口1" ); 14 스레드 thread2 = 새로운 스레드 (ticketWindows "窗口2" ); 15 스레드 thread3 = 새로운 스레드 (ticketWindows "窗口3" ); 16 thread1.start (); 17 thread2.start (); 18 thread3.start (); 19 20 } 21 }
공공 클래스 TicketWindows 구현 실행 가능한 { 개인 정수 nums = 5000 ; @Override 공공 무효 RUN () { // 와서 한 번에 처리 하나 개의 스레드 만 대신 1.synchronized 수정 과정을, // 2.synchronized 코드 블록을 동기화 잠금 개체는 모든 스레드에 의해 공유되어야한다 // 동기화 (는 Thread.currentThread () getName ().) { // } 그동안 합니다 (nums> 0 ) { 동기화 ( 다음은이 ) { IF 합니다 (nums> 0 ) { nums - ; 에서 System.out.println (.는 Thread.currentThread () getName () + "卖了一张票剩下."+ nums + "张" ); } } 시도 { Thread.sleep를 ( 100 ); } 캐치 (의 InterruptedException E) { // TODO 자동 생성 캐치 블록 e.printStackTrace (); } } } // @Override // 공공 무효 실행 () { // // TicketWindows.class获取TicketWindows.class文件 // (TicketWindows.class) {동기화 // // 하나 개의 스레드 만 온 동시에 나타내는 1.synchronized 수정 방법, // // 2.synchronized 코드 블록, 동기화 잠금 객체가 모든 스레드에 의해 공유되어야한다 // // 동기화 (는 Thread.currentThread을 ( )는 .getName ()) { //은 // } // 그동안합니다 (nums가 0) {> // ; nums-- // .에서 System.out.println (는 Thread.currentThread () getName () + "하나 품 "nums + + 남은 티켓 // "장을 "); // } // } // } }