Java终止某个线程的方法
2016-10-19 21:14
225 查看
转自:http://andyzhu.blog.51cto.com/4386758/848946
在Java中有专门终止某个线程的API,如stop()和interrupt()。其中stop()由于安全机制的我问题已经被废弃不用,现在就剩下interrupt。其实这个方法并不是一个终断动作的操作,而是一个设置终断状态的操作。它需要和isInterrupted()配合使用。例如:
package org.leadfar;
public class MyThread04 extends Thread {
private boolean stop = false;
public MyThread04(String threadName) {
super(threadName);
}
@Override
public void run() {
for (int j = 0; j < 100; j++) {
if(this.isInterrupted()) break;
System.out.println(Thread.currentThread().getName()+":"+j);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void setStop() {
this.stop = true;
}
//第一个线程
public static void main(String[] args) {
MyThread04 t = new MyThread04("辅线程");
t.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
System.out.println("....................");
t.interrupt();
}
}
但这个很可能不会终止线程,因为当我们终止这个线程时很可能就会发生InterruptedException异常,当有这个异常发生时我们设置的终断状态也会被清除,所以我们要终断某个线程应采用以下这个方法:
package org.leadfar;
public class MyThread04 extends Thread {
private boolean stop = false;
public MyThread04(String threadName) {
super(threadName);
}
@Override
public void run() {
for (int j = 0; j < 100; j++) {
if(stop) break;
System.out.println(Thread.currentThread().getName()+":"+j);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void setStop() {
this.stop = true;
}
//第一个线程
public static void main(String[] args) {
MyThread04 t = new MyThread04("辅线程");
t.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
System.out.println("....................");
t.setStop();
}
}
通过设置一个我们自己的标识来达到终端某个线程。
在Java中有专门终止某个线程的API,如stop()和interrupt()。其中stop()由于安全机制的我问题已经被废弃不用,现在就剩下interrupt。其实这个方法并不是一个终断动作的操作,而是一个设置终断状态的操作。它需要和isInterrupted()配合使用。例如:
package org.leadfar;
public class MyThread04 extends Thread {
private boolean stop = false;
public MyThread04(String threadName) {
super(threadName);
}
@Override
public void run() {
for (int j = 0; j < 100; j++) {
if(this.isInterrupted()) break;
System.out.println(Thread.currentThread().getName()+":"+j);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void setStop() {
this.stop = true;
}
//第一个线程
public static void main(String[] args) {
MyThread04 t = new MyThread04("辅线程");
t.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
System.out.println("....................");
t.interrupt();
}
}
但这个很可能不会终止线程,因为当我们终止这个线程时很可能就会发生InterruptedException异常,当有这个异常发生时我们设置的终断状态也会被清除,所以我们要终断某个线程应采用以下这个方法:
package org.leadfar;
public class MyThread04 extends Thread {
private boolean stop = false;
public MyThread04(String threadName) {
super(threadName);
}
@Override
public void run() {
for (int j = 0; j < 100; j++) {
if(stop) break;
System.out.println(Thread.currentThread().getName()+":"+j);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void setStop() {
this.stop = true;
}
//第一个线程
public static void main(String[] args) {
MyThread04 t = new MyThread04("辅线程");
t.start();
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
System.out.println("....................");
t.setStop();
}
}
通过设置一个我们自己的标识来达到终端某个线程。
相关文章推荐
- Java中终止某个线程的方法
- JAVA中 终止线程的方法介绍
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)(r)
- Java终止当前线程的方法
- Java 终止线程的方法
- Java中安全终止线程的方法
- 【java】 java 中stop方法终止线程的不良后果
- 终止java线程的三种方法
- java 线程终止方法
- JAVA中终止线程的方法
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- [原]Java多线程编程学习笔记之二:线程挂起、恢复与终止的正确方法(含代码)
- Java线程之interrupt终止线程,Thread中的主要方法(五)
- Java 终止线程方法
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)
- java 多线程总结(一) 创建线程的几种方法及对终止线程运行的讨论
- java多线程中终止线程的方法的对别