<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
    主站蜘蛛池模板: 亚洲黄色网址在线观看| 亚洲精品国产suv一区88| 国产免费AV片在线播放唯爱网 | 亚洲国产一成久久精品国产成人综合| jizz免费在线观看| 亚洲av无码一区二区三区观看| 免费中文字幕一级毛片| 国产一区二区免费| 成人婷婷网色偷偷亚洲男人的天堂| 国产AⅤ无码专区亚洲AV| 日本三级2019在线观看免费| 免费人成动漫在线播放r18| 亚洲精品乱码久久久久久下载| 四虎免费影院4hu永久免费| 日韩精品久久久久久免费| 在线91精品亚洲网站精品成人| 久久久久久亚洲Av无码精品专口 | 最近中文字幕mv免费高清视频7| 中文在线免费视频| 亚洲高清毛片一区二区| 91天堂素人精品系列全集亚洲| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 免费人成动漫在线播放r18| 久久久青草青青国产亚洲免观| 黄页免费的网站勿入免费直接进入| 一区二区视频在线免费观看| 亚洲伊人久久大香线蕉结合| 久久精品7亚洲午夜a| 免费A级毛片无码久久版| 黄瓜视频高清在线看免费下载| 在线观看肉片AV网站免费| 特级aa**毛片免费观看| 亚洲中文无码mv| 亚洲小说图片视频| 亚洲av最新在线网址| 国产亚洲精品免费视频播放| 国产精品久免费的黄网站| 最新免费jlzzjlzz在线播放| www视频在线观看免费| 国产精品免费看久久久 | 少妇性饥渴无码A区免费|