关于Object.wait(long t)的问题,请指教
下面的代码照理应该输出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();
}
}
我是这样想的:
首先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();
}
}
...全文
相关推荐
Object类wait及notify方法原理实例解析
主要介绍了Object类wait及notify方法原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java 中Object的wait() notify() notifyAll()方法使用
主要介绍了Java 中Object的wait() notify() notifyAll()方法使用的相关资料,需要的朋友可以参考下
Object.wait()与Object.notify()的用法详细解析
以下是对java中Object.wait()与Object.notify()的用法进行了详细的分析介绍,需要的朋友可以过来参考下
TCP状态迁移,CLOSE_WAIT & FIN_WAIT2 的问题解决
对于服务器挂起中的CLOSE_WAIT & FIN_WAIT2 解决方案。
java Object wait方法详细介绍
主要介绍了java Object wait方法详细介绍的相关资料,需要的朋友可以参考下


Java SE
