如何停止线程?
只有一种,run方法结束。
开启多线程运行,运行代码通常都是循环结构。只要控制住循环(添加标记),就可以让run方法结束,也就是线程结束。
class StopThread implements Runnable
{
<span style="color:#33ccff;">private boolean flag = true;</span>
public void run()
{
while(flag)
{
System.out.println(Thread.currentThread().getName()+"..run");
}
}
public void changFlag()
{
flag = false;
}
}
class StopThreadDemo1
{
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)
{
<span style="color:#00cccc;">st.changFlag();</span>
break;
}
System.out.println(Thread.currentThread().getName()+"..main");
}
System.out.println("over");
}
}
特殊情况:
当线程处于冻结状态,就不会读取到标记,那么线程就不会结束。
当没有指定的方式让冻结的线程恢复到运行状态时,需要对冻结进行清除,强制让线程恢复到运行状态中来。
Interrupt 方法是强制地将处于冻结状态的线程恢复到运行状态中来
class StopThread implements Runnable
{
private boolean flag = true;
public synchronized void run()
{
while(flag)
{
try
{
wait();
}
catch(InterruptedException e)
{
System.out.println(Thread.currentThread().getName()+"..Exception");
<span style="color:#33ccff;">flag = false;</span>
}
System.out.println(Thread.currentThread().getName()+"..run");
}
}
}
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)
{
<span style="color:#33ccff;">t1.interrupt();
t2.interrupt();</span>
break;
}
System.out.println(Thread.currentThread().getName()+"..main");
}
System.out.println("over");
}
}
pubic final void setDaemon (boolean on)
将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java虚拟机退出。
该方法必须在启动线程前调用。