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

1.1.13 多進路-單處理-多出路實驗

本實現的目標是允許多個線程同時處理任務,但執行任務的順序卻是同步的,也就是阻塞的,所以也稱單處理。

創建實驗用的項目Semaphore_MoreToOne_2,將Semaphore_MoreToOne_1項目中的所有源代碼復制到項目Semaphore_MoreToOne_2中,更改類Service.java代碼如下:


        package service;
        import java.util.concurrent.Semaphore;
        import java.util.concurrent.locks.ReentrantLock;
        public class Service {
            private Semaphore semaphore = new Semaphore(3);
            private ReentrantLock lock = new ReentrantLock();
            public void sayHello() {
                try {
                    semaphore.acquire();
                    System.out.println("ThreadName=" + Thread.currentThread().getName()
                              + "準備");
                  lock.lock();
                  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());
                  lock.unlock();
                  semaphore.release();
                  System.out.println("ThreadName=" + Thread.currentThread().getName()
                          + "結束");
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
      }

在代碼中加入了ReentrantLock對象,保證了同步性。

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

圖1-25 打印循環中的內容為有序

在單處理步驟中實現了同步,所以打印的效果呈1,2,3,4,5這樣的順序。

主站蜘蛛池模板: 阳西县| 云和县| 井冈山市| 四会市| 宁国市| 呼玛县| 永胜县| 贡觉县| 白山市| 仁化县| 达孜县| 迭部县| 临泉县| 安乡县| 文安县| 沛县| 广宁县| 拉萨市| 伊川县| 邯郸县| 湘阴县| 咸宁市| 泰和县| 中超| 萨迦县| 东山县| 蒙阴县| 铁岭县| 宜城市| 安阳县| 万盛区| 泰兴市| 昌都县| 锦屏县| 大兴区| 法库县| 伊宁市| 那坡县| 清河县| 乌兰县| 林州市|