Thread_Part2

Thread

Thread系列分为1,2两个部分,上一篇写了关于线程控制的一些方法

以下为,Thread_part2,内容为线程关闭:

问题:一个线程,让他一直运行在主程序运行期间,如何安全有效的关闭线程?
常用做法:

1
2
3
4
5
6
7
while(flag)
{
XXX//do something....
}
void close(){
this.flag=false;
}

通过这种主动标志,有时候可以让线程停止。但是如果,在XXX处出现让线程阻塞的情况,显然close()方法无法关闭线程,而且会造成线程的阻塞。
比如,XXX可能是,A=B.accept();
假如B没有accept到A,那么线程就会阻塞在这个地方
So
解决方案:

1
2
3
4
void close(){
this.flag=false;
new A(XXX);//此处应是任何可以使线程运行下去的方法,保证线程运行到while-loop对flag的判断
}

当然在实现程序中,要比这复杂,但是基本思路是这样,欢迎批评指正!