官术网_书友最值得收藏!

1.1.12 多進路-多處理-多出路實驗

本實現(xiàn)的目標是允許多個線程同時處理任務,更具體來講,也就是每個線程都在處理自己的任務。

創(chuàng)建實驗用的項目Semaphore_MoreToOne_1,類Service.java代碼如下:


        package service;
        import java.util.concurrent.Semaphore;
        public class Service {
            private Semaphore semaphore = new Semaphore(3);
            void sayHello() {
                try {
                    semaphore.acquire();
                    System.out.println("ThreadName=" + Thread.currentThread().getName()
                              + "準備");
                    System.out.println("begin hello " + System.currentTimeMillis());
                    for (int i = 0; i < 5; i++) {
                        System.out.println(Thread.currentThread().getName()
                        + "打印"  + (i + 1));
                    }
                    System.out.println("   end hello " + System.currentTimeMillis());
                    semaphore.release();
                    System.out.println("ThreadName=" + Thread.currentThread().getName()
                              + "結束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

線程類MyThread.java代碼如下:


        package extthread;
        import service.Service;
        public class MyThread extends Thread {
            private Service service;
            public MyThread(Service service) {
                super();
                this.service = service;
            }
            @Override
            public void run() {
                service.sayHello();
              }
          }

運行類Run.java代碼如下:


          package test.run;
          import service.Service;
          import extthread.MyThread;
          Public class Run {
              public static void main(String[] args) {
                  Service service = new Service();
                  MyThread[] threadArray = new MyThread[12];
                  for (int i = 0; i < threadArray.length; i++) {
                      threadArray[i] = new MyThread(service);
                      threadArray[i].start();
                  }
              }
          }

程序運行結果如圖1-24所示。

圖1-24 打印循環(huán)中的內(nèi)容為亂序

運行的效果是多個線程同時進入,而多個線程又幾乎同時執(zhí)行完畢。

主站蜘蛛池模板: 江阴市| 景东| 什邡市| 泊头市| 通榆县| 达日县| 阿坝县| 城市| 黔东| 宜宾县| 清丰县| 富宁县| 榆树市| 浦县| 惠州市| 寿阳县| 新蔡县| 屯门区| 黎川县| 庆城县| 葫芦岛市| 武威市| 清涧县| 辉南县| 颍上县| 娄底市| 临桂县| 胶州市| 文登市| 邹平县| 宜昌市| 宁津县| 汝州市| 柘荣县| 海门市| 乌兰浩特市| 金湖县| 阳西县| 双辽市| 沈阳市| 错那县|