<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks
    Semaphore當前在多線程環境下被擴放使用,操作系統的信號量是個很重要的概念,在進程控制方面都有應用。Java 并發庫 的Semaphore 可以很輕松完成信號量控制,Semaphore可以控制某個資源可被同時訪問的個數,通過 acquire() 獲取一個許可,如果沒有就等待,而 release() 釋放一個許可。比如在Windows下可以設置共享文件的最大客戶端訪問個數。 

    Semaphore實現的功能就類似廁所有5個坑,假如有10個人要上廁所,那么同時只能有多少個人去上廁所呢?同時只能有5個人能夠占用,當5個人中 的任何一個人讓開后,其中等待的另外5個人中又有一個人可以占用了。另外等待的5個人中可以是隨機獲得優先機會,也可以是按照先來后到的順序獲得機會,這取決于構造Semaphore對象時傳入的參數選項。單個信號量的Semaphore對象可以實現互斥鎖的功能,并且可以是由一個線程獲得了“鎖”,再由另一個線程釋放“鎖”,這可應用于死鎖恢復的一些場合。

    Semaphore維護了當前訪問的個數,提供同步機制,控制同時訪問的個數。在數據結構中鏈表可以保存“無限”的節點,用Semaphore可以實現有限大小的鏈表。另外重入鎖 ReentrantLock 也可以實現該功能,但實現上要復雜些。 

    下面的Demo中申明了一個只有5個許可的Semaphore,而有20個線程要訪問這個資源,通過acquire()和release()獲取和釋放訪問許可。

    package com.test;

    import java.util.concurrent.ExecutorService;

    import java.util.concurrent.Executors;

    import java.util.concurrent.Semaphore;

    public class TestSemaphore {

                    public static void main(String[] args) {

                    // 線程池

                    ExecutorService exec = Executors.newCachedThreadPool();

                    // 只能5個線程同時訪問

                    final Semaphore semp = new Semaphore(5);

                     // 模擬20個客戶端訪問

                     for (int index = 0; index < 20; index++) {

                                  final int NO = index;

                                  Runnable run = new Runnable() {

                                                     public void run() {

                                                                try {

                                                                        // 獲取許可

                                                                        semp.acquire();

                                                                        System.out.println("Accessing: " + NO);

                                                                        Thread.sleep((long) (Math.random() * 10000));

                                                                        // 訪問完后,釋放

                                                                        semp.release();

                                                                        System.out.println("-----------------"+semp.availablePermits());

                                                                } catch (InterruptedException e) {

                                                                        e.printStackTrace();

                                                                }

                                                      }

                                          };

                          exec.execute(run);

                 }

                 // 退出線程池

                 exec.shutdown();

           }

    執行結果如下:

    Accessing: 0

    Accessing: 1

    Accessing: 3

    Accessing: 4

    Accessing: 2

    -----------------0

    Accessing: 6

    -----------------1

    Accessing: 7

    -----------------1

    Accessing: 8

    -----------------1

    Accessing: 10

    -----------------1

    Accessing: 9

    -----------------1

    Accessing: 5

    -----------------1

    Accessing: 12

    -----------------1

    Accessing: 11

    -----------------1

    Accessing: 13

    -----------------1

    Accessing: 14

    -----------------1

    Accessing: 15

    -----------------1

    Accessing: 16

    -----------------1

    Accessing: 17

    -----------------1

    Accessing: 18

    -----------------1

    Accessing: 19




    http://www.cnblogs.com/whgw/archive/2011/09/29/2195555.html
    posted on 2013-01-08 00:11 abin 閱讀(368) 評論(0)  編輯  收藏 所屬分類: JavaMultithread
    主站蜘蛛池模板: 亚洲an日韩专区在线| 亚洲国产老鸭窝一区二区三区| 亚洲国产成人精品女人久久久 | 69免费视频大片| 2021国产精品成人免费视频| 成人免费一区二区无码视频| 免费一级毛片正在播放| 亚洲国产精品无码久久SM| 亚洲一卡二卡三卡四卡无卡麻豆| 综合偷自拍亚洲乱中文字幕 | 亚洲国产成人久久精品软件| 四虎一区二区成人免费影院网址 | 亚洲精品视频免费观看| 久久久久久a亚洲欧洲aⅴ| 亚洲国产夜色在线观看| 国产精品亚洲一区二区三区在线观看| 国产免费久久精品丫丫| 3344永久在线观看视频免费首页| 波多野结衣久久高清免费| 亚洲日韩中文字幕在线播放| 亚洲不卡视频在线观看| 成年免费a级毛片| 97性无码区免费| 亚洲综合国产精品第一页| 亚洲国产精品综合久久2007| 免费一级毛suv好看的国产网站| 午夜免费福利视频| 国产成人免费全部网站| 亚洲网址在线观看你懂的| 精品国产日韩亚洲一区在线| 日韩视频免费在线观看| 国产美女做a免费视频软件| 亚洲av不卡一区二区三区| 国产成人精品亚洲| 91精品成人免费国产片| 国产成人精品日本亚洲专区| 亚洲xxxxxx| 无码日韩精品一区二区三区免费 | 激情五月亚洲色图| 两个人日本免费完整版在线观看1| 一个人免费观看在线视频www|