黑马程序员技术交流社区
标题:
关于线程停止的问题
[打印本页]
作者:
少年闰土
时间:
2015-6-13 20:11
标题:
关于线程停止的问题
线程停止
:只有一种,run方法结束。开启多线程运行,运行代码通常是循环结构。只要控制住循环(测试条件),就可以让run方法结束,也就是线程结束。
特殊情况:
当线程处于了冻结状态。就不会读取到标记。那么线程就不会结束。
当没有指定的方式让冻结的线程恢复到运行状态是,这时需要对冻结进行清除。强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。Thread类提供该方法 interrupt();
下面是对上面想法的代码实现:
public class StopThreadDemo {
public static void main(String[] args) {
MyThd t = new MyThd();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.start();
t2.start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main end");
t1.interrupt();//给t1线程清除中断状态
}
}
class MyThd implements Runnable {
Object obj = new Object();
int tick = 100;
boolean stop = false; //停止标志
public void run() {
while(!stop) {
synchronized (obj) {
if (tick > 0) {
try {
Thread.sleep(100);
System.out.println(Thread.currentThread().getName() + "......" + tick--);
} catch (InterruptedException e) {
//当收到InterruptedException异常时设置停止标志,在下次循环时会检测到stop,结束线程
System.out.println(Thread.currentThread().getName() + " " + e.getMessage());
stop = true;
}
}
}
}
System.out.println(Thread.currentThread().getName() + " 停止");
}
}
复制代码
但是在这段代码中有点问题,当主线程给两个子线程中任意子线程清除中断状态时,两个子线程都会结束,有没有什么办法能准确的控制要结束的子线程,不必两个都结束呢?
作者:
Nemo
时间:
2015-6-13 20:16
。。。。。。表示也在学习中啊。。。。。。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2