您的位置:首页 > 编程语言 > Java开发

java 线程停止的方法

2014-09-09 12:00 183 查看
线程停止的方法:

记住一点,线程的停止,
1.自己运行完了,
2.如果是无限循环,在外部,只能用flag标记来操作。

但是当线程处于冻结状态(阻塞),sleep,wait,join,(这三个方法抛出异常。)
就不会读取到flag.
这个时候,我们要清除线程的冻结状态,让它回到运行中。

如果,线程没有使之冻结的语句,则,inierrupt()不进行任何操作。
interrupt()方法,会使sleep,wait,jion方法抛出异常。
然后,我们在处理异常的语句中来操作。

我推荐的方式:不在catch中改变标记,
还是调用改变标记的方法,然后,跟上interrupt.

st.changeFlag();
t1.interrupt();
这样,无论线程中,有没有受阻塞的方法,都会停止线程。

class StopThread implements Runnable
{
private boolean flag=true;

public void run()
{
while(flag)
{
synchronized(this)
{
try
{
wait();
}
catch (Exception e)
{
System.out.println(Thread.currentThread().getName()+"...Exception");
flag=false;
}
}
}

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++==10000)
{
//st.changeFlag();
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+"....."+num);
}

}
}

本文出自 “厚积薄发” 博客,请务必保留此出处http://duanzhenyue.blog.51cto.com/9360091/1550144
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: