读书人

java中的interrupt跟stop方法java

发布时间: 2013-02-24 17:58:56 作者: rapoo

java中的interrupt和stop方法——java中线程停止的方法

简单的看interrupt其实是设置了一个变量。除非有wait(), join(), sleep()等方法,否则调用interrupt()方法,是没有什么效果的。

stop()确实是终止一个线程的方法。并且终止后,的确回收了部分资源。这里要看资源是什么,如果是socket, 和IO流等,这里需要自己去close().如果你觉得自己每次在调用的地方写麻烦,那就在线程的finalize()方法里定义如果回收IO流/Socket流/数据库连接等。

另外如果希望在一个线程中杀掉另外一个线程,还是推荐使用stop()方法,虽然java文档中说这个方法很不安全,并且以后在更高级的版本中不再提供该方法。


终止一个线程的方法有如下几种:

1. 设置volatile变量或者普通一个全局变量。volatile的好处是保证了不会被java compiler优化,也就是不会调整语句的执行顺序。例如:

public void run() {  try {    while(true) {                // do something               wait();    }  } catch(Exception e){}}

外面拿到这个线程的reference就可以执行 thread.interrupt(); 这样线程就终止了。

3. 直接执行thread.stop() 方法。


如果// do something这个执行语句中有一个未知的方法,这个方法执行的时间较长以及消耗内存较大。那么如果监控到内存消耗超过一定值,就应该把这个线程kill掉。那么上面两种方法是无论如何都做不到的。只能只用stop()方法。但stop()方法的劣势也在java doc中有详尽的说明。这里就不多说了。





读书人网 >编程

热点推荐