中文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 好不容易 閱讀(201) 評論(0)  編輯  收藏


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


          網站導航:
           
          PK10開獎 PK10開獎
          主站蜘蛛池模板: 绥芬河市| 靖宇县| 阳西县| 峨眉山市| 乾安县| 汤原县| 梨树县| 陇川县| 鄂托克旗| 宜黄县| 科技| 甘南县| 玉环县| 文成县| 呼玛县| 齐齐哈尔市| 富阳市| 崇左市| 全椒县| 襄汾县| 江油市| 新泰市| 宁安市| 怀来县| 惠水县| 东海县| 东乡族自治县| 甘德县| 漳浦县| 云林县| 都昌县| 五指山市| 木兰县| 秭归县| 五华县| 白水县| 兴海县| 玛纳斯县| 离岛区| 辽中县| 五华县|