| - 수요 설명
| - 구현
플러스 동기화 방법을 통해 루프를 수행하는 run () 메소드 내부 while 루프를, 쓰기,이 메소드는 스레드가 "암표"라는 판사, 다음 문을 추가하고이 스레드를 종료
| - 콘텐츠 코드
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 패키지 cn.thread1; 2 세 수입 java.util.Enumeration; 4 5 / ** 6 * @auther : 9527 7 * @description :看病 8 * @program : shi_yong 9 * @create : 2019년 8월 5일 14시 34분 10 * / 11 공용 클래스 환자 구현 의 Runnable을 { 12 개인 문자열 이름; 13 개인 의 INT NUM = 0; // 抢的票 14 개인 INT의 수 = 10; // 总票数 15 개인 부울 = 플래그 는 false ; // 티켓 구입 여부 레코드 16 . 17 공개 환자 () { 18이다 } . 19 (20)가 공개 환자에게 (문자열 이름) { 21 인 이 본 .name을 = ; 이름 22이다 } (23) 인 24 @Override 25 공공 공극 RUN () { (26) 그동안 (! 깃발) { 27 명 티켓 (); 28 // 암표가 투표를 움켜 잡는 경우는, 루프가 종료 29 IF (..는 Thread.currentThread () getName () 등호 ( "암표" )) { 30 반환; 31이다 } 32 } 33 인 34 } 35 개 36 공중 동기화 무효 티켓 {() 37 [ // 설정된 루프 종료 조건 (38)는 IF (COUNT <= 0 ) { 39 플래그 = true로 ; 40 창 ; 41이다 } 42 인 // 모든 사이클 표 뺀의 수 플러스 잡아 득표 수가 43 인 count-- ; 44은 ++ NUM ; 45 은 try { 46이다 // 대기 시뮬레이션 47 Thread.sleep를 (100 ), 48 } 캐치 (예외 : InterruptedException E) { 49 e.printStackTrace (); 50 } 51이다 // 요구 출력 (52)이다 에서 System.out.println (는 Thread.currentThread () getName () + "그랩. 제 "+ NUM +"티켓의 티켓 "+ + 카운트"나머지 "! ) (53)는 54 것은 } 55 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 패키지 cn.thread1; 2 3 / ** 4 * @auther : 9527 5 * @description :运行 6 * @program : shi_yong 7 * @create : 2019년 8월 5일 15시 8 * / 9 공용 클래스 주요 { 10 공공 정적 무효 메인 (문자열 []에 args) { 11 환자 p = 새 환자 (); 12 13 스레드 T1 = 새로운 스레드 (p "桃跑跑" ); 14 스레드 T2 = 새로운 스레드 (p "张票票" ); (15) 스레드 (T3) = 새로운 스레드 (p "黄牛党" ); 16 t1.start (); 17 t2.start (); 18 t3.start (); 19 } 20 }
| - 운영 결과
| - 오류 로그
심사 방법은 사람들의 표를 잡기 위해 가장 개방 시작, 아니 구현 요구 사항이 없었다, 외부 run () 메소드에 쓰기
이 출력 이전에 결정되는 경우, 다음과 같이 전체 루틴 종료를 잡기 위해 티켓을 발생하지 않습니다