转: Java安全停止线程方法

转: http://blog.csdn.net/flyingpig4/article/details/7675557

1.早期Java提供java.lang.Thread类型包含了一些列的方法start(), stop(), stop(Throwable) and suspend(), destroy() and resume()。,Sun公司的一篇文章《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated? 》
2.使用volatile变量来设置Thread的run的循环条件,保证变量同步性  

public class JavaTest extends Thread{
private volatile boolean isRun = true;
public static void main(String[] args) {
JavaTest thread = new JavaTest();
thread.start();
thread.close();
}
@Override
public void run() {
while (isRun) {
//dosomething
}
}
public void close() {
this.isRun = false;
}
}
3.使用interrupt()来中止非运行状态的线程,如wait()和sleep()状态的线程,此时可利用interrupted来终止线程
public class JavaTest extends Thread{
private volatile boolean isRun = true;
public static void main(String[] args) {
JavaTest thread = new JavaTest();
thread.start();
thread.close();
if (thread != null) {
thread.interrupt(); //外围调用关闭
}
}
@Override
public void run() {
while (isRun) {
//dosomething  

try {
wait();   //同样适用于sleep等状态
} catch (InterruptedException e) {
//catch Exception
}
}
}
public void close() {
this.isRun = false;
}
}
时间: 2024-10-12 18:38:27

转: Java安全停止线程方法的相关文章

Java中停止线程执行的方法

Java中停止线程执行的方法 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.暂停或停止线程的理论 在Java编程中,要暂停或停止当前正在运行的线程,有几种方法.对于把线程转入睡眠Sleep状态,使用Thread.sleep()是最正确的方式.或许有人会问,为什么不使用等待wait()或通知notify()?要知道,使用等待或通知都不是很好的方式. 线程可以使用等待wait()实现被阻塞,这属于条件等待的方式,当条件满足后,又会从阻塞转为等待状态

java多线程---停止线程

@Deprecated public final void stop() jdk源码中Thread的stop()方法已经被弃用了.那么怎么停止线程的呢? thread.interrupt();这就是需要用到的方法 一般建议使用抛异常的方法来实现停止线程.因为在catch块里可对异常信息进行相关处理. 如下: public class StopThread extends Thread{ /** * 停止一个线程可用Thread.stop(),但这个方法是不安全的,被弃用的.别用 * 还可以用Th

java基础:线程方法之interrupt和sleep

一:直接看demo 输出结果: -------Tue Feb 03 19:57:02 CST 2015---- -------Tue Feb 03 19:57:03 CST 2015---- -------Tue Feb 03 19:57:04 CST 2015---- -------Tue Feb 03 19:57:05 CST 2015---- -------Tue Feb 03 19:57:06 CST 2015---- -------Tue Feb 03 19:57:07 CST 201

java基础:线程方法之join

一:看程序 二:分析 join方法的含义是:合并线程,本例中就是将r线程,拽回到main主线程,那么就会先执行r线程,再执行main线程的输出. 三:输出结果: Runner1----0 Runner1----1 Runner1----2 Runner1----3 Runner1----4 Runner1----5 Runner1----6 Runner1----7 Runner1----8 Runner1----9 main-------0 main-------1 main-------2

java基础:线程方法之设置优先级

一:看程序 二:分析 t1.setPriority(Thread.NORM_PRIORITY + 3); 增加线程t1的优先级 执行可以发现,优先输出线程t1.

java基础:线程方法之yield方法

一:看程序 二:分析 (1)当i能被10整除的时候,让出线程. if(i % 10 == 0){ yield(); } (2)MyThread(String name) { <span style="white-space:pre"> </span>super(name); } 这个构造方法,可以给线程起名字. 创建线程的时候,可以指定名字MyThread t1 = new MyThread("t1");

java线程之停止线程

     在Java中有以下3种方法可以终止一个正在运行的线程:      1.使用退出标志,是线程正常退出,也就是run方法完成后线程终止.      2.使用stop方法强制终止线程,蛋不推荐使用这个方法,因为stop.suspend和resume一样,都是作废过期的方法.      3.使用interrupt方法中断线程,大多数停止一个线程使用Thread.interrupt()方法,但是这个方法不会终止一个正在运行的线程,还需要加入一些判断才可以完成线程的停止. 下面我就用几个例子来介绍

正确的停止java中的线程

stop()方法不是一个正确的停止线程方法. 正确的停止方法:设置退出旗标

Java笔记七.线程间通信与线程生命的控制

线程间通信与线程生命的控制 一.线程通信方法 Java是通过Object类的wait.notify.notifyAll这几个方法来实现进程键的通信.由于所有的类都是从Object继承的,因此在任何类中都可以直接使用这些方法. wait:告诉当前线程放弃监视器并进入睡眠状态,知道其他线程进入同一监视器并调用notify为止; notify:唤醒同一对象监视器中调用wait的第一个线程.用于类似饭馆有一个空位后通知所有等候就餐的顾客中的第一位可以入座的情况: notifyAll:唤醒同一对象监视器中