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 李威威 阅读(1379) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: