国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

synchronized關鍵字

2019-11-08 03:20:24
字體:
來源:轉載
供稿:網友
  在前面一節中,介紹了如何使用Lock和Condition對象,在進一步深入之前,總結以下有關鎖和條件的關鍵之處:鎖用來保護代碼片段,任何時刻只能有一個線程被保護的代碼鎖可以管理試圖進入被保護代碼段的線程鎖可以擁有一個或者多個相關的條件對象每個條件對象管理那些已經進入倍保護代碼但還不能運行的線程Lock和Condition接口被添加到java SE5.0中,這也向程序設計人員提供了高度的封鎖控制。然而,大多數情況下,并不需要那樣的控制,并且可以使用一種嵌入到JAVA語言內部的機制。從1.0開始,JAVA中的每一個對象都有喲哥內部鎖。如果一個方法用synchronized關鍵字聲明,那么對象的鎖將保護整個方法,也就是說,要調用該方法,線程必須獲得內部的對象鎖。換句話說,public synchronized void method(){    method body}等價與public void methed(){    this.intrinsicLock.lock();    try    {        method body    }    finally{this.intrinsicLock.unlock();}}可以簡單的聲明類的某個方法為synchronized,而不是使用一個顯式的鎖。內部對象鎖只有一個相關條件。wait方法添加一個線程到等待集中,notifyAll/notify方法接觸等待線程的阻塞狀態。換句話說,d調用wait或者notifyAll等價于intrinsicCondition.await();intrinsicCondition.signalAll();    wait,notifyAll以及notify方法是Object類的final方法。Condition方法必須被命名為await,signalAll和signal以便他們不會與那些方法發生沖突。例如,可以用JAVA實現Bank類如下:class Bank{    public synchronized void transfer(int from,int to,int amounrt) throws InterruptedException{        while(account[from]<amount)            wait();        account[from] -= amount;        account[to] += amount;        notifyAll();    }    public synchronized double getTotalBalance(){...}    PRivate double[] accounts;}可以看到,使用synchronized關鍵字來編寫代碼要簡潔很多。當然,要理解這一代碼,必須了解每一個對象有一個內部鎖,并且該鎖有一個內部條件。由鎖來管理那些試圖進入synchronized方法的線程,由條件來管理那些調用wait的線程。將靜態方法聲明為synchronized也是合法的。如果調用這種方法,該方法獲得相關的類的內部鎖,例如,如果Bank類有一個靜態同步的方法,那么當該方法調用時,Bank.class對象的鎖被鎖住。因此,沒用其他線程可以調用同一個類的這個或者任何其他的同步靜態方法。內部鎖和條件存在一些局限。包括:不能中斷一個正在試圖獲得鎖的線程。試圖獲得鎖時不能設定超時。每個鎖僅有單一的條件,可能是不夠的。
上一篇:遞歸實現二叉樹

下一篇:linux 進度條

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 措勤县| 铜鼓县| 岗巴县| 镇巴县| 华容县| 深水埗区| 方城县| 宜州市| 合山市| 沁水县| 诸城市| 遂川县| 鸡泽县| 南溪县| 双流县| 安吉县| 阿坝县| 罗源县| 临夏县| 河津市| 定陶县| 遂溪县| 襄垣县| 寻甸| 宾阳县| 鄂伦春自治旗| 榕江县| 东乡族自治县| 灵宝市| 佛山市| 平昌县| 贵定县| 仁化县| 龙海市| 井研县| 禹城市| 彭阳县| 弥勒县| 阿拉尔市| 盐津县| 安新县|