java中的interrupt和stop方法——java中线程停止的方法
2013-02-20 19:55
363 查看
简单的看interrupt其实是设置了一个变量。除非有wait(), join(), sleep()等方法,否则调用interrupt()方法,是没有什么效果的。
stop()确实是终止一个线程的方法。并且终止后,的确回收了部分资源。这里要看资源是什么,如果是socket, 和IO流等,这里需要自己去close().如果你觉得自己每次在调用的地方写麻烦,那就在线程的finalize()方法里定义如果回收IO流/Socket流/数据库连接等。
另外如果希望在一个线程中杀掉另外一个线程,还是推荐使用stop()方法,虽然java文档中说这个方法很不安全,并且以后在更高级的版本中不再提供该方法。
终止一个线程的方法,帐前卒觉得有如下几种:
1. 设置volatile变量或者普通一个全局变量。volatile的好处是保证了不会被java compiler优化,也就是不会调整语句的执行顺序。例如:
if (a == null) {
synchronized(a) {
if (a == null) {
a = new instance();
}
}
}
上面的语句很有可能被编译器优化为
if (a == null) {
synchronized(a) {
a = new instance();
if (a == null) {
}
}
}这个在java 1.6以上版本反正是支持volatile关键字的。
一般这样终止线程
while(value) {
// do something
}
// 另外一个线程,会修改value这个bool变量。
2. 使用wait(), join(), sleep()等方法:
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中有详尽的说明。帐 前卒这里就不多说了。
stop()确实是终止一个线程的方法。并且终止后,的确回收了部分资源。这里要看资源是什么,如果是socket, 和IO流等,这里需要自己去close().如果你觉得自己每次在调用的地方写麻烦,那就在线程的finalize()方法里定义如果回收IO流/Socket流/数据库连接等。
另外如果希望在一个线程中杀掉另外一个线程,还是推荐使用stop()方法,虽然java文档中说这个方法很不安全,并且以后在更高级的版本中不再提供该方法。
终止一个线程的方法,帐前卒觉得有如下几种:
1. 设置volatile变量或者普通一个全局变量。volatile的好处是保证了不会被java compiler优化,也就是不会调整语句的执行顺序。例如:
if (a == null) {
synchronized(a) {
if (a == null) {
a = new instance();
}
}
}
上面的语句很有可能被编译器优化为
if (a == null) {
synchronized(a) {
a = new instance();
if (a == null) {
}
}
}这个在java 1.6以上版本反正是支持volatile关键字的。
一般这样终止线程
while(value) {
// do something
}
// 另外一个线程,会修改value这个bool变量。
2. 使用wait(), join(), sleep()等方法:
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中有详尽的说明。帐 前卒这里就不多说了。
相关文章推荐
- java 多线程(1) join() / interrupt() 打断sleep() / stop() / run() / 线程停止的方法
- 停止Java线程,弃用stop()方法, 也要小心interrupt()方法
- java中如何靠interrupt来停止stop一个线程
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- java多线程(三)停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- 停止Java线程,小心interrupt()方法
- java线程控制,当stop按钮就停止,当start按钮就开始运行,当按stop时程序又停止的实现方法
- [改善Java代码]不使用stop方法停止线程
- 停止java线程方法,小心interrupt