当前位置: 技术问答>java相关
一个很菜的线程问题
来源: 互联网 发布时间:2015-11-07
本文导语: public class test extends Thread{ private int i=0; public test() { } public void run(){ while(true){ try{ System.out.println("======="+i); sleep(1000); i++; }catch(Exception err){}...
public class test extends Thread{
private int i=0;
public test() {
}
public void run(){
while(true){
try{
System.out.println("======="+i);
sleep(1000);
i++;
}catch(Exception err){};
}
}
public static void main(String[] args) {
test test1 = new test();
test1.run();
System.out.println("all");
}
这是一个一秒输出一次的线程,当然最后一句没用。
如果我改成为样:
第一种情况:public void run(){
while(true)
改成
第二种情况: public void run(){
while(i==100)
为什么它只输出all。
同样的,我把sleep改成wait后,当第一种情况时,i不自加,改成第二种情况后,只输出all.
能不能解释一下原因,并且wait()中的时间是用什么单位?
private int i=0;
public test() {
}
public void run(){
while(true){
try{
System.out.println("======="+i);
sleep(1000);
i++;
}catch(Exception err){};
}
}
public static void main(String[] args) {
test test1 = new test();
test1.run();
System.out.println("all");
}
这是一个一秒输出一次的线程,当然最后一句没用。
如果我改成为样:
第一种情况:public void run(){
while(true)
改成
第二种情况: public void run(){
while(i==100)
为什么它只输出all。
同样的,我把sleep改成wait后,当第一种情况时,i不自加,改成第二种情况后,只输出all.
能不能解释一下原因,并且wait()中的时间是用什么单位?
|
while(i==0),条件false,循环直接结束,线程终止,所以你只看到了all
wait的用法不是你理解的那样,你最好参考一下jdk文档
wait的用法不是你理解的那样,你最好参考一下jdk文档
|
wait()是对应了notify()或者notifyAll()的,就是将正在运行的线程必须等待直到另外一个线程唤醒它为止。里边的时间是等待的时间,如果有这个参数,那么等到这个time out后,会自动恢复。以毫秒计算。
|
楼上说的没错,我来晚了:(
|
楼上的可以补充啊,把wait的用法讲一讲啊,期待ing。。。