黑马程序员技术交流社区
标题:
关于停止线程
[打印本页]
作者:
Fightingforever
时间:
2014-10-25 11:57
标题:
关于停止线程
实在不能理解为什么
作者:
Fightingforever
时间:
2014-10-25 12:00
class StopThread implements Runnable
{
private boolean flag=true;
public synchronized void run()
{
while(flag)
try
{
this.wait();
}
catch(InterruptedException e)
{
System.out.println(Thread.currentThread().getName()+"...Exception");
}
System.out.println(Thread.currentThread().getName()+"...run");
}
public void changeFlag()
{
flag=false;
}
}
class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st=new StopThread();
Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t2.start();
int num=0;
while(true)
{
if(num++==60)
{
st.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"......"+num);
}
}
}
我自己认为主线程运行完后 调用了changeFlage 函数,使Flag标为false了 t1和t2是不会运行的,但是结果却是
D:\java0217\day12>javac StopThreadDemo.java
D:\java0217\day12>java StopThreadDemo
main......1
main......2
main......3
main......4
main......5
main......6
main......7
main......8
main......9
main......10
main......11
main......12
main......13
main......14
main......15
main......16
main......17
main......18
main......19
main......20
main......21
main......22
main......23
main......24
main......25
main......26
main......27
main......28
main......29
main......30
main......31
main......32
main......33
main......34
main......35
main......36
main......37
main......38
main......39
main......40
main......41
main......42
main......43
main......44
main......45
main......46
main......47
main......48
main......49
main......50
main......51
main......52
main......53
main......54
main......55
main......56
main......57
main......58
main......59
main......60
Thread-0...run
Thread-1...run
D:\java0217\day12>^A
作者:
zd12345
时间:
2014-10-25 13:34
哪里不能理解啊??
作者:
Fightingforever
时间:
2014-10-25 14:30
zd12345 发表于 2014-10-25 13:34
哪里不能理解啊??
为什么线程1 、2都运行了呀
作者:
noiary
时间:
2014-10-25 15:48
本帖最后由 noiary 于 2014-10-25 15:56 编辑
我在想,是不是两个线程已经运行了,只是在等待状态,即使flag设置成了false, 两个线程也要循环一次才能结束.
看起来是这样的,因为线程等待的时候已经判断完了循环条件,进入了while循环.
可以把try{this.wait()} catch{} 放到while循环外面试一下.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2