中文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開獎
          主站蜘蛛池模板: 静安区| 浦县| 涞水县| 介休市| 昂仁县| 惠水县| 丰镇市| 绥江县| 汾阳市| 浦东新区| 绿春县| 玉田县| 鄂伦春自治旗| 和平区| 兰溪市| 赤壁市| 且末县| 浪卡子县| 敦煌市| 赤水市| 安岳县| 荥阳市| 普陀区| 乌什县| 元谋县| 广饶县| 新疆| 吕梁市| 洛隆县| 册亨县| 罗源县| 丹凤县| 青田县| 永昌县| 阜阳市| 新田县| 贵州省| 梅河口市| 红安县| 固始县| 余庆县|