wait()與sleep()的區別相信很多人都懂了,在這里我就不說了。
           

          wait(),對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)后本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。


          public class ThreadTest {

           
           static int i=0;
           
           public static void main(String[] args) {
            new ThreadTest().setInt(5);
            
            System.out.println(i);

           }
           
           public  void setInt(int i){
            this.i=i;
            try {
             this.wait();
            } catch (InterruptedException e) {
             
             e.printStackTrace();
            }
            
           }

          }


          因此在對上述概念較充分理解后,你就會明白以上這個程序錯在哪里?

          在eclipse編寫和編譯并沒有錯,但當運行后eclipse提示:IllegalMonitorStateException: current thread not owner

          Exception in thread "main" java.lang.IllegalMonitorStateException: current thread not owner
           at java.lang.Object.wait(Native Method)
           at java.lang.Object.wait(Unknown Source)
           at standlww.project.ThreadTest.setInt(ThreadTest.java:21)
           at standlww.project.ThreadTest.main(ThreadTest.java:12)Exception in thread "main" java.lang.IllegalMonitorStateException: current thread not owner
           at java.lang.Object.wait(Native Method)
           at java.lang.Object.wait(Unknown Source)
           at standlww.project.ThreadTest.setInt(ThreadTest.java:21)
           at standlww.project.ThreadTest.main(ThreadTest.java:12)

          原因在于對此對象調用wait方法導致本線程放棄對象鎖對此對象調用wait方法導致本線程放棄對象鎖,而 public  void setInt(int i)方法沒有加鎖,是個不需要加鎖就能運行得方法。

          posted on 2008-10-20 21:20 李威威 閱讀(1395) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
           
          主站蜘蛛池模板: 聂拉木县| 惠东县| 丰原市| 芦山县| 威信县| 涡阳县| 南投县| 洮南市| 闽侯县| 广州市| 霸州市| 昆山市| 怀远县| 永吉县| 安义县| 泰来县| 依安县| 宝清县| 南皮县| 镇雄县| 玉林市| 石渠县| 瑞昌市| 沙湾县| 贵州省| 玉门市| 田阳县| 永嘉县| 剑河县| 奉贤区| 万源市| 黄大仙区| 哈巴河县| 阳江市| 商洛市| 大名县| 伊金霍洛旗| 宣威市| 商南县| 萨迦县| 合阳县|