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 李威威 閱讀(1391) 評論(0)  編輯  收藏

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


          網站導航:
           
           
          主站蜘蛛池模板: 印江| 礼泉县| 大连市| 新邵县| 白银市| 麦盖提县| 施甸县| 博兴县| 南投县| 普定县| 石河子市| 清新县| 桑日县| 邳州市| 弥渡县| 宜良县| 米易县| 三穗县| 阳山县| 巩义市| 井冈山市| 永州市| 华安县| 固阳县| 罗平县| 公安县| 泰顺县| 阿合奇县| 张掖市| 乐清市| 特克斯县| 高密市| 镇巴县| 方城县| 北辰区| 江都市| 福州市| 东安县| 花垣县| 江口县| 澄江县|