熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java2入門經典教程 11.2 管理線程[8]

2013-11-23 19:57:59  來源: Java高級技術 

    線程間通信

    我們已經看到如何使用同步鎖住方法或代碼塊避免導致末控制線程在程序中執行雖然這給我們某周程度的控制我們的程序仍是低效的在最後一個例子中在當前線程可以介理地繼續工作前有一些在我們用循環等待一個職員線程完成一個操作的機會例如當Clerk對象仍忙於處理前一個線程時我們不能將一個交易交給這個對象解決的方法是用一個while循環一次次地測試Clerk對象的繁忙狀態並存兩次測試之間調用sleep()方法但有一個更好的方法

    Object類定義了wait() notify()和notifWAll()方法你可以用這些方法為處理這種情況提供更有效的方法因為所有的類由Object派生所以所有的類繼承了這些方法你可以在synchronized方法或一個同步代碼塊中調用這些方法如果你沒有這麼做會拋出一個IIlegalMonitrstateException類型的異常這些方法執行的功能是

    wait()和notify()方法的基本思想是為針一對一個特定的對象被同步的方法或代碼塊提供通信方一個塊可以調用wait()掛起它的操作直到針對同一對象的其他同步方法或代碼塊用某種方式改變它並調用nntify()知這個變化完成了因為與之同步的對象的某些特性沒有被設置或沒有滿足某此條件一個線程會有代表性地調用wait()這依賴於另一個線程的行動也許最簡單的情況是由於幾一個資源正被另一個線程修改所以處於繁忙但你決不會受限於此

[]  []  []  []  []  []  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27743.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.