中文JAVA技術平等自由協作創造

          Java專題文章博客和開源

          常用鏈接

          統計

          最新評論

          Java實現主線程等待子線程

            本文介紹兩種主線程等待子線程的實現方式,以5個子線程來說明:
            1、使用Thread的join()方法,join()方法會阻塞主線程繼續向下執行。
            2、使用java.util.concurrent中的CountDownLatch,是一個倒數計數器。初始化時先設置一個倒數計數初始值,每調用一次countDown()方法,倒數值減一,他的await()方法會阻塞當前進程,直到倒數至0.
            join方式代碼如下:
            package com.test.thread;
            import java.util.ArrayList;
            import java.util.List;
            public class MyThread extends Thread
            {
            public MyThread(String name)
            {
            this.setName(name);
            }
            @Override
            public void run()
            {
            System.out.println(this.getName() + " staring…");
            System.out.println(this.getName() + " end…");
            }
            /**
            * @param args
            */
            public static void main(String[] args)
            {
            System.out.println("main thread starting…");
            List<MYTHREAD> list = new ArrayList<MYTHREAD>();
            for (int i = 1; i <= 5; i++)
            {
            MyThread my = new MyThread("Thrad " + i);
            my.start();
            list.add(my);
            }
            try
            {
            for (MyThread my : list)
            {
            my.join();
            }
            }
            catch (InterruptedException e)
            {
            e.printStackTrace();
            }
            System.out.println("main thread end…");
            }
            }
            運行結果如下:
            main thread starting…
            Thrad 2 staring…
            Thrad 2 end…
            Thrad 4 staring…
            Thrad 4 end…
            Thrad 1 staring…
            Thrad 1 end…
            Thrad 3 staring…
            Thrad 3 end…
            Thrad 5 staring…
            Thrad 5 end…
            main thread end…
            CountDownLatch方式代碼如下:
            package com.test.thread;
            import java.util.concurrent.CountDownLatch;
            public class MyThread2 extends Thread
            {
            private CountDownLatch count;
            public MyThread2(CountDownLatch count, String name)
            {
            this.count = count;
            this.setName(name);
            }
            @Override
            public void run()
            {
            System.out.println(this.getName() + " staring…");
            System.out.println(this.getName() + " end…");
            this.count.countDown();
            }
            /**
            * @param args
            */
            public static void main(String[] args)
            {
            System.out.println("main thread starting…");
            CountDownLatch count = new CountDownLatch(5);
            for (int i = 1; i <= 5; i++)
            {
            MyThread2 my = new MyThread2(count, "Thread " + i);
            my.start();
            }
            try
            {
            count.await();
            }
            catch (InterruptedException e)
            {
            e.printStackTrace();
            }
            System.out.println("main thread end…");
            }
            }
            運行結果如下:
            main thread starting…
            Thread 2 staring…
            Thread 2 end…
            Thread 4 staring…
            Thread 4 end…
            Thread 1 staring…
            Thread 1 end…
            Thread 3 staring…
            Thread 3 end…
            Thread 5 staring…
            Thread 5 end…
            main thread end…托福答案

          posted on 2014-08-25 22:00 好不容易 閱讀(196) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 耒阳市| 扎囊县| 黄陵县| 遵义县| 嵊泗县| 洪雅县| 桃园市| 习水县| 兴城市| 高清| 岳池县| 天峻县| 巴林右旗| 新平| 和顺县| 五家渠市| 通河县| 土默特左旗| 绵竹市| 德钦县| 兴安县| 万盛区| 齐河县| 青阳县| 晋中市| 屯留县| 古蔺县| 天镇县| 商南县| 进贤县| 尼勒克县| 綦江县| 河北区| 平原县| 汉中市| 房山区| 海林市| 日照市| 广元市| 贺州市| 汶川县|