亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java筆記--對信號量Semaphore的理解與運用

2019-11-14 20:52:08
字體:
來源:轉載
供稿:網友
java筆記--對信號量Semaphore的理解與運用

java Semaphore 信號量的使用:

在java中,提供了信號量Semaphore的支持。

Semaphore類是一個計數信號量,必須由獲取它的線程釋放, 通常用于限制可以訪問某些資源(物理或邏輯的)線程數目。

一個信號量有且僅有3種操作,且它們全部是原子的:初始化、增加和減少 增加可以為一個進程解除阻塞; 減少可以讓一個進程進入阻塞。

--如果朋友您想轉載本文章請注明轉載地址"http://www.49028c.com/XHJT/p/3910406.html"謝謝--

信號量維護一個許可集,若有必要,會在獲得許可之前阻塞每一個線程: //從此信號量獲取給定數目的許可,在提供這些許可前一直將線程阻塞。 acquireUninterruptibly(int permits){} 每一個release()添加一個許可,從而可能釋放一個正在阻塞的獲取者。 Semaphore只對可用許可的號碼進行計數,并采取相應的行動。 如何獲得Semaphore對象? public Semaphore(int permits,boolean fair) permits:初始化可用的許可數目。 fair: 若該信號量保證在征用時按FIFO的順序授予許可,則為true,否則為false; 如何從信號量獲得許可? public void acquire() throws InterruptedException

如何釋放一個許可,并返回信號量? public void release() 代碼實例: 20個人去銀行存款,但是該銀行只有兩個辦公柜臺,有空位則上去存錢,沒有空位則只能去排隊等待

package com.xhj.thread;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;/** * 線程信號量Semaphore的運用 *  * @author XIEHEJUN *  */public class SemaphoreThread {    PRivate int a = 0;    /**     * 銀行存錢類     */    class Bank {        private int account = 100;        public int getAccount() {            return account;        }        public void save(int money) {            account += money;        }    }    /**     * 線程執行類,每次存10塊錢     */    class NewThread implements Runnable {        private Bank bank;        private Semaphore semaphore;        public NewThread(Bank bank, Semaphore semaphore) {            this.bank = bank;            this.semaphore = semaphore;        }        @Override        public void run() {            int b = a++;            if (semaphore.availablePermits() > 0) {                System.out.println("線程" + b + "啟動,進入銀行,有位置立即去存錢");            } else {                System.out.println("線程" + b + "啟動,進入銀行,無位置,去排隊等待等待");            }            try {                semaphore.acquire();                bank.save(10);                System.out.println(b + "賬戶余額為:" + bank.getAccount());                Thread.sleep(1000);                System.out.println("線程" + b + "存錢完畢,離開銀行");                semaphore.release();            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }    /**     * 建立線程,調用內部類,開始存錢     */    public void useThread() {        Bank bank = new Bank();        // 定義10個新號量        Semaphore semaphore = new Semaphore(2);        // 建立一個緩存線程池        ExecutorService es = Executors.newCachedThreadPool();        // 建立20個線程        for (int i = 0; i < 10; i++) {            // 執行一個線程            es.submit(new Thread(new NewThread(bank, semaphore)));        }        // 關閉線程池        es.shutdown();        // 從信號量中獲取兩個許可,并且在獲得許可之前,一直將線程阻塞        semaphore.acquireUninterruptibly(2);        System.out.println("到點了,工作人員要吃飯了");        // 釋放兩個許可,并將其返回給信號量        semaphore.release(2);    }    public static void main(String[] args) {        SemaphoreThread test = new SemaphoreThread();        test.useThread();    }}

面試題思考: 在很多情況下,可能有多個線程需要訪問數目很少的資源。假想在服務器上運行著若干個回答客戶端請求的線程。這些線程需要連接到同一數據庫,但任一時刻 只能獲得一定數目的數據庫連接。你要怎樣才能夠有效地將這些固定數目的數據庫連接分配給大量的線程? 答:1.給方法加同步鎖,保證同一時刻只能有一個人去調用此方法,其他所有線程排隊等待,但是此種情況下即使你的數據庫鏈接有10個,也始終只有一個處于使

用狀態。這樣將會大大的浪費系統資源,而且系統的運行效率非常的低下。

2.另外一種方法當然是使用信號量,通過信號量許可與數據庫可用連接數相同的數目,將大大的提高效率和性能。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产91| 97超级碰碰碰久久久| 亚洲天堂av在线播放| 久久精品福利视频| 欧美在线观看一区二区三区| 国内精久久久久久久久久人| 久久福利视频网| 日韩精品欧美国产精品忘忧草| 国产精品一区久久久| 久久久国产一区| 亚洲人成网站在线播| 国自产精品手机在线观看视频| 欧美激情一区二区三级高清视频| 久久久久久久久久久人体| 亚洲理论在线a中文字幕| 久久精品久久久久电影| 一区二区成人精品| 在线a欧美视频| 国产精品男人爽免费视频1| 黄色一区二区在线观看| 中文字幕欧美专区| 久久九九亚洲综合| 波霸ol色综合久久| 91亚洲精品视频| 亚洲精品久久久久久久久久久久| 日韩成人在线视频网站| 欧美亚洲第一区| 日韩久久免费视频| 国产精品久久久久7777婷婷| 国产精品第3页| 国产精品99免视看9| 日本一区二区三区在线播放| 亚洲成人精品视频在线观看| 欧美一区深夜视频| 日韩精品久久久久| 欧美一区二区三区四区在线| 日韩国产激情在线| 国产啪精品视频网站| 国产一区二区三区日韩欧美| 国产精品久久综合av爱欲tv| 日韩电影中文字幕| 欧美激情亚洲一区| 91免费视频国产| 国产视频久久久久| 日韩免费高清在线观看| 精品成人国产在线观看男人呻吟| 日韩亚洲欧美成人| 欧洲亚洲妇女av| 色综合久久久久久中文网| 日韩av最新在线| 亚洲电影免费在线观看| 色综合91久久精品中文字幕| 亚洲免费视频在线观看| 91国产美女视频| 91在线中文字幕| 精品视频在线导航| 国内精品视频久久| 欧美激情亚洲精品| 亚洲欧美一区二区三区在线| 欧美激情a∨在线视频播放| 91亚洲人电影| 成人黄色大片在线免费观看| 国产精品爱啪在线线免费观看| 92看片淫黄大片看国产片| 久久精品国产欧美激情| 538国产精品一区二区免费视频| 午夜精品一区二区三区在线播放| 国产精品视频公开费视频| 国产精品久久久久久久久久99| 国产剧情久久久久久| 亚洲欧美制服另类日韩| 青青青国产精品一区二区| 国产成人极品视频| 久久久女女女女999久久| 91精品久久久久久久久青青| 亚洲jizzjizz日本少妇| 亚洲一区二区三区在线免费观看| 欧美激情精品在线| 国产精品一区二区久久久| 国产精品扒开腿做| 欧美电影免费观看高清完整| 国产精品美女www爽爽爽视频| 欧美电影免费观看| 日韩欧美中文字幕在线观看| 亚洲www视频| 国产午夜精品一区理论片飘花| 伊人久久久久久久久久久| 97在线视频免费观看| 久久精品国产一区二区三区| 亚洲变态欧美另类捆绑| 亚洲精品一区av在线播放| 亚洲精品网站在线播放gif| 国产欧洲精品视频| 懂色av一区二区三区| 日韩精品中文字幕有码专区| 日韩精品视频中文在线观看| 久久亚洲电影天堂| 久久综合亚洲社区| 久久国产一区二区三区| 成人精品福利视频| 日韩中文字幕精品视频| 欧美性猛交xxxx黑人猛交| 隔壁老王国产在线精品| 欧美高跟鞋交xxxxxhd| 色中色综合影院手机版在线观看| 91亚洲国产成人精品性色| 国产精品久久久久久av福利| 亚洲成人亚洲激情| 国产精品一区二区三| 国产一区二区三区在线看| 国产精品久久久久久久久久三级| 中文字幕精品—区二区| 97精品一区二区三区| 国产精品久久久久久久午夜| 日韩高清欧美高清| 日韩av免费看| 日韩一二三在线视频播| 国产精品福利观看| 亚洲免费av电影| 精品国产一区二区三区在线观看| 久久久久久久久久久免费| 欧美色videos| 人妖精品videosex性欧美| 亚洲国产精品久久久久秋霞不卡| 久久6免费高清热精品| 日韩在线欧美在线国产在线| 国产97在线|日韩| 国产精品久久久久久久久久久不卡| 亚洲aaa激情| 国产精品免费视频久久久| 国产美女扒开尿口久久久| 亚洲精品久久久久久久久| 亚洲人成网站免费播放| 欧美大尺度电影在线观看| 超在线视频97| 亚洲福利影片在线| 亚洲女性裸体视频| 国产亚洲精品高潮| 色噜噜国产精品视频一区二区| 日本亚洲精品在线观看| 成人在线视频福利| 国产精品久久久久久av福利| 5566成人精品视频免费| 色妞一区二区三区| 午夜精品久久久久久久久久久久| 亚洲美女www午夜| 国产91精品网站| 国产脚交av在线一区二区| 中文字幕日韩av综合精品| 免费91麻豆精品国产自产在线观看| 日韩在线不卡视频| 97国产在线观看| 久久久久久综合网天天| 日韩欧美极品在线观看| 亚洲色图日韩av| 国产一区二区丝袜高跟鞋图片| 精品亚洲夜色av98在线观看| 国产精品久久综合av爱欲tv| 91精品久久久久久久久久久久久久| 亚洲淫片在线视频| 插插插亚洲综合网| 国产精品观看在线亚洲人成网| 777国产偷窥盗摄精品视频| 久久精品电影一区二区|