关于Object.wait(long t)的问题,请指教

SmileAndHappy SmileAndHappy 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面的代码照理应该输出1000左右的数字,但是输出的是64.
我是这样想的:
首先Object.wait(long t)是很精确的,Timer类也是用该
方法来实现执行时间的安排的。
然后看run函数,在stop前做一个无限循环,而且获得本身
的管程,所以每次执行wait(1)这条语句都会停留1微秒,
然后作cnt的加操作,所以经过1000毫秒的sleep应该加到
1000才对呀,请问大家我想的错在哪里?

public class Test implements Runnable {
boolean flag = true;
int cnt = 0;
public void run() {
System.out.println("start");
synchronized(this) {
while(flag) {
try {
wait(1);
cnt++;
}catch(Exception e){}
}
}
}

void stop() {
flag = false;
System.out.println("cnt="+cnt);
}

public static void main(String[] args) throws Exception {
Test t = new Test();
Thread thread = new Thread(t);
thread.start();
Thread.sleep(1000);
t.stop();
}
}
...全文

相关推荐

评论 17
收藏 已收藏
分享
返回顶部
SmileAndHappy
Java SE 62,620 成员 307,251 内容