停止线程
Posted 薰衣草
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了停止线程相关的知识,希望对你有一定的参考价值。
如何停止线程?
只有一种,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虚拟机退出。
该方法必须在启动线程前调用。
以上是关于停止线程的主要内容,如果未能解决你的问题,请参考以下文章