通常线程代码中都会写循环。只要控制住循环即可。
那么可以通过定义循环标记的形式来完成。
在满足某些条件时,就让改变标记,线程在执行到标记时,循环就会停止。线程就会结束。
但是有一种情况,当线程处于了冻结状态时,比如执行到了wait方法,那么这时线程是不会执行标记的。
如果还没有唤醒机制,那么程序不会结束。
这时,只能强制让线程恢复到运行状态中来,让其执行标记,并结束。
那么可以使用Thread类中的interrupt()方法。
该方法用于中断线程的冻结状态。强制让线程恢复到运行状态中来,
但是这种强制会发生InterruptedException。所以要进行一下处理。
class Demo implements Runnable
{
private boolean flag = true;
public synchronized void run()
{
while(flag)
{
try
{
wait();
}
catch(InterruptedException e)
{
flag = false;
}
}
}
}
main()
{
Demo d = new Demo();
Thread t1 = new Thread(d);
Thread t2 = new Thread(d);
t1.interrupt();
}
参考:day12\StopThreadDemo.java
---------------------------------------
其他方法:
setDaemon(boolean b):如果参数为true,那么会将该线程标记为后台线程。
该方法要用在开启线程前。
后台线程的特点:开启后,和前台线程一样会互相抢CPU的执行资源。
只有在结束的时候,有自身,当所有的前台线程都结束了,后台线程会自动结
|
|