Java 학습-다중 스레드 고전 사례의 거북이 토끼 달리기

2962 단어 Java 기반
Java 학습-다중 스레드 고전 사례의 거북이 토끼 달리기
우리는 다선정을 배운 후에 하나의 사례를 보고 다선정을 깊이 이해하고 다선정을 체득했다.
코드는 다음과 같습니다.
/**
 *        :      
 */
public class ThreadRace implements Runnable{
    //     
    private String winner;

    @Override
    public void run() {
        for (int step=1; step<=100; step++) {
            //         ,   ,   20    ,      
            if (Thread.currentThread().getName().equals("   ") && step%20==0){
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("run      ");
                }
            }
            //           ,    
            boolean flag = getFlag(step);
            //       ,     ,break    
            if (flag){
                break;
            }
            //        
            System.out.println(Thread.currentThread().getName()+"  "+step+" ");
        }
    }

    private boolean getFlag(int step) {
        //        ,   ,  true,     ,    
        if (winner!=null){
            return true;
        }
        //         ,     ,          winner
        if (step>=100){
            winner=Thread.currentThread().getName();
            System.out.println("    ");
            System.out.println("    :"+winner);
            return true;
        }
        return false;
    }

    //   
    public static void main(String[] args) {
        //       
        ThreadRace race = new ThreadRace();
        //    ,       
        new Thread(race,"  ").start();
        new Thread(race,"   ").start();
    }
}


결과 출력:
	    1 
	     1 
	     2 
	     3 
	     4 
	     5 
	     6 
	     7 
	     8 
	     9 
	     10 
	     11 
	     12 
	     13 
	     14 
	     15 
	     16 
	     17 
	     18 
	     19 
	    2 
	    3 
	    4 
	    5 
	    6 
	    7 
	    8 
	    9 
	    10 
	    11 
	    12 
	    13 
	    14 
	    15 
	    16 
	    17 
	    18 
	    19 
	    20 
	    21 
	    22 
	    23 
	    24 
	    25 
	    26 
	    27 
	    28 
	    29 
	    30 
	    31 
	    32 
	    33 
	    34 
	    35 
	    36 
	    37 
	    38 
	    39 
	    40 
	    41 
	    42 
	    43 
	    44 
	    45 
	    46 
	    47 
	    48 
	    49 
	    50 
	    51 
	    52 
	    53 
	    54 
	    55 
	    56 
	    57 
	    58 
	    59 
	    60 
	    61 
	    62 
	    63 
	    64 
	    65 
	    66 
	    67 
	    68 
	    69 
	    70 
	    71 
	    72 
	    73 
	    74 
	    75 
	    76 
	    77 
	    78 
	    79 
	    80 
	    81 
	    82 
	    83 
	    84 
	    85 
	    86 
	    87 
	    88 
	    89 
	    90 
	    91 
	    92 
	    93 
	    94 
	    95 
	    96 
	    97 
	    98 
	    99 
	    
	    :  

주의: 매번 운행하는 결과가 다를 수 있으니 몇 번 더 운행해서 느낄 수 있습니다.여기에 토끼를 20걸음마다 50ms씩 자게 해 거북이가 이길 확률을 높였지만 절대적인 것은 아니다.마지막으로 cpu의 기분을... cpu가 타임슬립을 어떤 라인에 줄지 봅시다.

좋은 웹페이지 즐겨찾기