比如有一个下载东西的线程ThreadA
可能下载太慢想取消下载,那么应该怎么样关闭这个线程呢?急急!!请高手给个小例子

解决方案 »

  1.   

                 ExecutorService exec = Executors.newCachedThreadPool();
                 exec.execute(you thread);
                 exec.shutdown(you thread);
      

  2.   

    Thread a = new ThreadA();
    a.start();
    a.stop(); //虽然这个方法被声明已过时,但是仍然可以使用。//或者使用
    a.interrupt();
      

  3.   


    Thread a = new Thread();
    a.interrupt();
      

  4.   

    或者可以用 Thread.yield() 
    方法去暂停这个线程哇  我觉得暂停比较适合  如果你搞FTP那么肯定需要暂停功能额
      

  5.   

    比较常用的方法是调用interrupt和加flag
      

  6.   

    调用interrupt方法 应该就可以
      

  7.   

    在线程中弄个boolean,判断,在要停止的时候,设成false
      

  8.   

    答:当你按下"取消下载"按钮时,要想尽一切办法,使得该下载线程的run()方法尽可能快地结束(如:抛出你自己定义的EndThreadException异常---使用throw语句的目的是:很大可能性,你的下载线程是一个使用递归算法的下载线程,这样用throw语句可一下子从递归的很深处一下子结束run(),这比用return来结束run()要快很多!)
      

  9.   

    interrupt并不一定能够立即结束线程的。我投14楼一票。
      

  10.   

    答:interrupt()与结束线程的run()是一点关系也没有的.interrupt()对于正在运行的线程而言,仅仅是设置了线程的中断标记位而已,它不会打断正在运行的线程的.
      

  11.   

    interrupt()和stop()是不可行的,并且有可能会对程序产生影响,用这两个方法会试图绕过线程内正在调用的其他系统资源,停止线程不会停止它们的执行。
      

  12.   

    有很多办法啊
    如果是支持线程池的,上面一位的代码确实事可以的ExecutorService exec = Executors.newCachedThreadPool(); 
    exec.execute(you thread); 
    exec.shutdown(you thread);但是如果不支持线程池,这个方法也不是非常好,
    Thread.interrput()就OK,不支持使用stop,太粗暴!
      

  13.   

    用stop、interrupt、sleep方法都行,看你怎么使了
      

  14.   

    interupt温柔,stop粗暴,应该是这样的吧
      

  15.   

    二楼的是jdk5后的惯用法,十四楼的分析很不错
      

  16.   

    可以调用ExecutorService的submit方法获得一个Futrue对象,调用future的cancle可以取消,可以覆盖future的cancle来实现用Thread的话子类可以覆盖interrupt方法来实现
      

  17.   

    前面略 
    public void interrupt() {
       try {
            socket.close();
        } catch(...){...}
    }
      

  18.   


    应该是这样
    public void interrupt() {
       try {
            socket.close();
        } catch(...){...}
    } finally {
        super.interrupt();
    }