线程停止:只有一种,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() + " 停止");
- }
- }
复制代码 但是在这段代码中有点问题,当主线程给两个子线程中任意子线程清除中断状态时,两个子线程都会结束,有没有什么办法能准确的控制要结束的子线程,不必两个都结束呢?
|
|