高手指教: 怎么样取消一个线程 比如有一个下载东西的线程ThreadA可能下载太慢想取消下载,那么应该怎么样关闭这个线程呢?急急!!请高手给个小例子 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ExecutorService exec = Executors.newCachedThreadPool(); exec.execute(you thread); exec.shutdown(you thread); Thread a = new ThreadA();a.start();a.stop(); //虽然这个方法被声明已过时,但是仍然可以使用。//或者使用a.interrupt(); Thread a = new Thread();a.interrupt(); 或者可以用 Thread.yield() 方法去暂停这个线程哇 我觉得暂停比较适合 如果你搞FTP那么肯定需要暂停功能额 比较常用的方法是调用interrupt和加flag 调用interrupt方法 应该就可以 在线程中弄个boolean,判断,在要停止的时候,设成false 答:当你按下"取消下载"按钮时,要想尽一切办法,使得该下载线程的run()方法尽可能快地结束(如:抛出你自己定义的EndThreadException异常---使用throw语句的目的是:很大可能性,你的下载线程是一个使用递归算法的下载线程,这样用throw语句可一下子从递归的很深处一下子结束run(),这比用return来结束run()要快很多!) interrupt并不一定能够立即结束线程的。我投14楼一票。 答:interrupt()与结束线程的run()是一点关系也没有的.interrupt()对于正在运行的线程而言,仅仅是设置了线程的中断标记位而已,它不会打断正在运行的线程的. interrupt()和stop()是不可行的,并且有可能会对程序产生影响,用这两个方法会试图绕过线程内正在调用的其他系统资源,停止线程不会停止它们的执行。 有很多办法啊如果是支持线程池的,上面一位的代码确实事可以的ExecutorService exec = Executors.newCachedThreadPool(); exec.execute(you thread); exec.shutdown(you thread);但是如果不支持线程池,这个方法也不是非常好,Thread.interrput()就OK,不支持使用stop,太粗暴! 用stop、interrupt、sleep方法都行,看你怎么使了 interupt温柔,stop粗暴,应该是这样的吧 二楼的是jdk5后的惯用法,十四楼的分析很不错 可以调用ExecutorService的submit方法获得一个Futrue对象,调用future的cancle可以取消,可以覆盖future的cancle来实现用Thread的话子类可以覆盖interrupt方法来实现 前面略 public void interrupt() { try { socket.close(); } catch(...){...}} 应该是这样public void interrupt() { try { socket.close(); } catch(...){...}} finally { super.interrupt();} Java 信息框 java 如何判断一个数字串的显示宽度呢? 编码转换的一个问题,没人知道吗? 数据加密,求救!!! Applet中将所画的图形放大和缩小的问题 怎样在JFrame中调用一个图片??? 请问:如何将int型(ascii值)转换为char型呢? 菜鸟提问:一个类实现了一个接口,除了要定义接口的所有方法外,可不可以再添加其他方法? 石头(菜鸟)问问题 java面试题(请老鸟帮忙一下)急啊!!!!!!!!!!!!! -xms64m -Xmx1000m 如何把这个设置直接添到jar包中,使执行主机在不设置java_opts情况下能用这个设置?
exec.execute(you thread);
exec.shutdown(you thread);
a.start();
a.stop(); //虽然这个方法被声明已过时,但是仍然可以使用。//或者使用
a.interrupt();
Thread a = new Thread();
a.interrupt();
方法去暂停这个线程哇 我觉得暂停比较适合 如果你搞FTP那么肯定需要暂停功能额
如果是支持线程池的,上面一位的代码确实事可以的ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(you thread);
exec.shutdown(you thread);但是如果不支持线程池,这个方法也不是非常好,
Thread.interrput()就OK,不支持使用stop,太粗暴!
public void interrupt() {
try {
socket.close();
} catch(...){...}
}
应该是这样
public void interrupt() {
try {
socket.close();
} catch(...){...}
} finally {
super.interrupt();
}