Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54720
  • 博文数量: 56
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-15 09:38
文章分类
文章存档

2011年(8)

2010年(48)

我的朋友

分类: Java

2011-06-23 13:57:57


java中,Object的wait()方法用了报错,小程序帮我看看。

浏览次数:714次悬赏分:5 | 解决时间:2009-12-14 21:45 | 提问者:
其实就是想看看wait方法怎么用,做了一个循环,每循环一次,wait 2秒。但是现在编译能通过,运行报错,程序如下:

package com;

public class WaitTest {
 public void again2(int i) {
  while (i < 5) {
   System.out.println(i);
   try {
    wait(2000);
   } catch (InterruptedException e) {
    // 忽略
   }
   i++;
  }
 }

 public static void main(String[] args) {
  WaitTest wt = new WaitTest();
  wt.again2(0);
 }
}



运行后报错如下:
0
Exception in thread "main" java.lang.IllegalMonitorStateException
 at java.lang.Object.wait(Native Method)
 at com.WaitTest.again2(WaitTest.java:8)
 at com.WaitTest.main(WaitTest.java:18)

问题补充:

哦 我知道原因了,用wait要加上对象锁,这样写就对了

package com;

public class WaitTest {
 public void again2(int i) {
  synchronized (this) {
   while (i < 5) {
    System.out.println(i);
    try {
     wait(2000);
    } catch (InterruptedException e) {
     // 忽略
    }
    i++;
   }
  }
 }

 public static void main(String[] args) {
  WaitTest wt = new WaitTest();
  wt.again2(0);
 }
}
阅读(734) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~