A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张继鲁 中级黑马   /  2014-2-24 18:00  /  809 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

停止线程有哪几种方法?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
关闭线程有几种方法,
一种是调用它里面的stop()方法(过时了不推荐)
另一种就是你自己设置一个停止线程的标记 (推荐这种)
代码如下:

  1. package com.demo;
  2. //测试Thread()的stop方法和自己编写一个停止标记来停止线程;
  3. public class StopThread() implements Runnable{
  4.         //停止线程的标记值boolean;
  5.         private boolean flag = true;
  6.         public void stopThread()(){
  7.                 flag = false;
  8.         }
  9.         public void run(){
  10.                 int i=0;
  11.                 while(flag){
  12.                         i++;
  13.                         System.out.println(Thread.currentThread().getName()+":"+i);
  14.                         try{
  15.                                 Thread.sleep(1000);
  16.                         }catch(Exception e){
  17.                         }
  18.                         System.out.println(Thread.currentThread().getName()+"==>"+i);
  19.                 }
  20.         }
  21.         public static void main(String args[]){
  22.                 StopThread st = new StopThread();
  23.                 Thread th = new Thread(st);
  24.                 Thread th1 = new Thread(st);
  25.                 th.start();
  26.                 th1.start();
  27.                 try{
  28.                         Thread.sleep(5500);
  29.                 }catch(Exception e){
  30.                 }
  31.                 /*
  32.                   如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次
  33.                   run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完
  34.                   成一次run方法;
  35.                 */
  36.                 th.stop();
  37.                 st.stopThread();
  38.         }
  39. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
总的来说,只有一种方法,让线程的run方法结束。
        1.定义循环结束标记
                因为线程运行代码一般都是循环,只要控制了循环就可以让线程结束。

                特殊情况:
                        当线程处于冻结状态或者说是中断状态(如wait状态。。),就不会读取到循环控制标记的改变,也就无法让线程结束;这个时候就要 使用interrupt(中断)方法
                该方法是结束线程的冻结状态,使得线程回到运行状态;同时线程上会产生一个 InterruptedException异常,当没有指定打方式让冻结打线程恢复到运行状态时,需要对冻结状态进行清除;在catch语句中让循环控制标记置位false。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马