자바 멀티 스레딩 표를 잡기 위해 아날로그

우리는 세 개의 개체가 강탈 한 설정 20 표, 멀티 스레딩을 사용하는 동안.

1  공용  클래스 Web123506은 구현 의 Runnable {
 2    개인  INT = 20 ticteksNums 단계; // 票数
3  
4      @Override
 5      공개  공극 실행 () {
 6       동안 ( ) {
 7           경우 (ticteksNums <0 ) {
 8               체류 ;
9           }
 10          / * 시도 {
 11               //睡眠
 12               에 Thread.sleep (200);
13           } 캐치 (의 InterruptedException E) {
 14              e.printStackTrace ();
 15           } * / 
16           에서 System.out.println (는 Thread.currentThread () getName () + - + ticteksNums-- ">은 잡았다." );
 17.  
18이다       }
 (19).      }
 (20)이다  
(21)는      공공  정적  무효 메인 (문자열 []에 args) {
 22이다             // 자원 
(23)은          Web123506 웹 = 새로운 새 ; Web123506 ()
 (24)          // 제의 복수 
25          새로운 새로운 스레드 (웹 "우리" ) .start ()
 (26)는          새로운 신규 스레드 (웹 "귀하" ) .start ();
 27          새로운 새로운 스레드 (웹, "암표").스타트();
28  
29      }
 30  
31 }

영업 실적은 다음과 같습니다 :

우리는 -> 20 움켜
> (18)를 잡고 - 암표를
당신은 -> 19 움켜
> (16)가 잡고 - 암표를
> 17 움켜 잡았다 - 우리
암표를 -> 14 잡고
당신 -> 잡아 15 일까지
암표 -> 12 움켜
> 13 움켜 잡았다 - 우리
암표를 -> (10)를 잡고
당신은 -> 11 움켜
암표를 -> 8 잡고
> 9 잡고 - 우리
암표를 - -> 여섯 잡고
> 7 잡고 - 당신은
> 4 잡고 - 암표를
> 5 잡고 - 우리
> 2 잡고 - 암표를
당신의이 -> 3 잡고
암표를 -> 0을 잡고
우리는 -> 1을 잡고

결론 :

우리는 어떤 중복 스레드 안전 표시, 티켓을 잡아하지가 있음을 알 수있다.

 

우리가 잠을 스레드에 가입이 시간.이 시간에 관찰 된 스레드 안전하지 않다?

1  공용  클래스 Web123506은 구현 의 Runnable {
 2    개인  INT = 20 ticteksNums 단계; // 票数
3  
4      @Override
 5      공개  공극 실행 () {
 6       동안 ( ) {
 7           경우 (ticteksNums <0 ) {
 8               체류 ;
9           }
 10           시도 {
 11               // 睡眠
12               에 Thread.sleep (200 );
13           } 캐치(예외 : InterruptedException E) {
 14               e.printStackTrace ();
 15           }
 16           에서 System.out.println (는 Thread.currentThread () getName () + "-"잡고 "ticteksNums-- +. )
 . (17)  
(18)된다       }
 . 19      }
 20은  
(21)은      공공  정적  무효 메인 (문자열 []에 args) {
 22이다             // 자원 
(23)이된다          Web123506 웹 = 새로운 새 ; Web123506 ()
 (24)          // 제의 복수 
25          새로운 새로운 스레드 (웹 "우리" ) .start ();
 (26)는          새로운 새 스레드 (웹, "귀하" ) .start ();
 (27)         새로운 새로운 스레드 (웹, "암표상" ) .start ();
 28  
(29)      }
 (30)  
(31)가 }

결과 :

암표 -> (20)가 잡고
19> 움켜 잡았다 - 우리
> 18 잡고 - 당신
> (17)가 잡고 - 암표를
> 16 움켜 잡았다 - 우리를
당신 -> 15 움켜
암표를 -> 돌진 14
우리는 -> 13 움켜
> 12 움켜 잡았다 - 당신
> (11)를 잡고 - 당신은
> 10 움켜 잡았다 - 우리는
> 9 잡고 - 암표를
당신 -> 8 잡고
우리를 -> 돌진 7
암표 -> 6 움켜
> 5 잡고 - 당신이
> 4 잡고 - 우리
암표 -> 세 잡고
당신의 -> 2 잡고
> 1 움켜 잡았다 - 우리
암표를 - > 0 잡아
당신 -> -1 잡고
우리를 -> 잡고 -1

결론 :

우리가 잠을 스레드를 추가 할 때 티켓을 잡기 위해 이번에는 마이너스가있을 수 있습니다 또는 티켓을 실을 잠을 스레드에 합류에 대해 동일한 지침이 안전하지 않은이 시간을 잡아 두 사람이있을 것입니다.

 

추천

출처www.cnblogs.com/xiaoqiqistudy/p/10984265.html