Javaスレッド-隋唐演義大劇

7267 ワード

package SuiTangYanYi;

//    
//         
public class ArmyRunnable implements Runnable {

    //volatile                                     
    //    ref JMM ,happens-before  
    volatile boolean keepRunning = true;

    @Override
    public void run() {
        while(keepRunning)
        {
            //  5  
            for(int i = 1; i <= 5 ;i++)
            {
                System.out.println(Thread.currentThread().getName()+"    "+i+" ");
                //                 
                Thread.yield();
            }
        }
        System.out.println(Thread.currentThread().getName()+"    ");
    }

}
package SuiTangYanYi;

public class KeyPersonThread extends Thread {

    public void run()
    {
        System.out.println(Thread.currentThread().getName()+"    ");
        for(int i = 0; i < 10 ;i++)
        {
            System.out.println(Thread.currentThread().getName()+"     ,      ");
        }

        System.out.println(Thread.currentThread().getName()+"    ");
    }
}
package SuiTangYanYi;

//        
public class Stage extends Thread {

    public void run()
    {
        //    
        System.out.println("          ");

        //    
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }

        //      Runnable  
        ArmyRunnable armyTackOfSuiDynasty = new ArmyRunnable();
        ArmyRunnable armyTackOfRevolt = new ArmyRunnable();

        //  Runnable      
        Thread armyOfSuiDynasty = new Thread(armyTackOfSuiDynasty,"  ");
        Thread armyOfRevolt = new Thread(armyTackOfRevolt,"     ");

        //           
        armyOfSuiDynasty.start();
        armyOfRevolt.start();

        //      50  
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("      ,         ");

        Thread mrCheng = new KeyPersonThread();
        mrCheng.setName("   ");

        //           
        //         :     like this...
        armyTackOfSuiDynasty.keepRunning = false;
        armyTackOfRevolt.keepRunning = false;

// armyOfSuiDynasty.stop(); //       stop()              
// armyOfRevolt.stop();
        //           interrupt()                     sleep、join                   


        //           
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        mrCheng.start();

        //             
        try {
            mrCheng.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("    !");

        //      
// armyTackOfSuiDynasty.keepRunning = false;
// armyTackOfRevolt.keepRunning = false;
// 
// try {
// armyOfRevolt.join();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
    }


    public static void main(String[] args)
    {
        new Stage().start();
    }
}

コンソール出力:
隋唐演義大劇はまもなく隋軍の攻撃相手1回農民蜂起軍の攻撃相手1回隋軍の攻撃相手2回農民蜂起軍の攻撃相手2回隋軍の攻撃相手3回農民蜂起軍の攻撃相手3回隋軍の攻撃相手4回農民蜂起軍の攻撃相手4回隋軍の攻撃相手5回農民蜂起軍の攻撃相手5回隋軍の攻撃相手1回農民蜂起軍の攻撃相手1回隋軍の攻撃相手2回農民蜂起軍の攻撃相手2回隋軍の攻撃相手3回農民蜂起軍の攻撃相手3回隋軍の攻撃相手4回双方の激戦が繰り広げられている.しかし、途中で程咬金農民蜂起軍を殺して相手を攻撃した4回の隋軍が相手を攻撃した5回の農民蜂起軍が相手を攻撃した5回の隋軍が戦闘を終えた農民蜂起軍が戦闘を終えた程咬金が戦闘を開始した程咬金が10連撃を開始した.无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入る程咬金発起十连撃、无人の境に入ると金を噛んで戦闘戦争を终える!