1:code
public class ThreadTest1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for(int i=0;i<500000;i++){
if(this.interrupted()){
System.out.println("已经退出---");
break;
}
System.out.println("--"+i);
}
}
}
public static void main(String[] args) {
ThreadTest1 th=new ThreadTest1();
th.start();
try {
Thread.sleep(2000);
th.interrupt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
log:
--331653
--331654
--331655
--331656
--331657
--331658
已经退出---
2: code
和1对比
public class ThreadTest1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
for(int i=0;i<500000;i++){
if(this.interrupted()){
System.out.println("已经退出---");
break;
}
System.out.println("--"+i);
}
System.out.println("如果输出改行-说明线程并没有停止!");
}
}
public static void main(String[] args) {
ThreadTest1 th=new ThreadTest1();
th.start();
try {
Thread.sleep(2000);
th.interrupt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
--332195
--332196
--332197
--332198
--332199
已经退出---
如果输出改行-说明线程并没有停止!
// 说线程仍然走了for后面的语句。
3: 异常抛出法退出线程
/**** 异常抛出法退出线程 ********/
public class ThreadTest1 extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
for (int i = 0; i < 500000; i++) {
if (this.interrupted()) {
System.out.println("已经退出---");
throw new InterruptedException();
}
System.out.println("--" + i);
}
System.out.println("如果输出改行-说明线程并没有停止!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadTest1 th=new ThreadTest1();
th.start();
try {
Thread.sleep(2000);
th.interrupt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
log:
--341903
--341904
--341905
--341906
--341907
--341908
--341909
--341910
已经退出---
java.lang.InterruptedException
at guoxw.ThreadTest1.run(ThreadTest1.java:13)
4:休眠中退出线程
在休眠中停止线程;
public class ThreadTest2 extends Thread {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
try {
System.out.println("beagin--");
Thread.sleep(20000);
System.out.println("end--");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("进入catch-"+this.isInterrupted());
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ThreadTest2 th=new ThreadTest2();
th.start();
try {
th.interrupt();
} catch (Exception e) {
e.printStackTrace();
}
}
beagin--
进入catch-false
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at guoxw.ThreadTest2.run(ThreadTest2.java:10)
5:Stop 暴力退出线程
stop 暴力停止
public class ThreadTest3 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(true){
System.out.println("输出信息--");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("进入catch");
}
}
}
}
public static void main(String[] args) {
ThreadTest3 th=new ThreadTest3();
th.start();
try {
Thread.sleep(6000);
th.stop();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
log:
输出信息--
输出信息--
输出信息--
输出信息--
输出信息--
注意:使用stop释放锁会给数据造成不一致性的结果。
6: 使用return 停止线程
public class ThreadTest4 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(true){
if(this.isInterrupted()){
System.out.println("停止了----");
return;
}
System.out.println("是否继续执行了?");
}
}
}
public static void main(String[] args) {
ThreadTest4 th=new ThreadTest4();
th.start();
try {
Thread.sleep(6000);
th.interrupt();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
是否继续执行了?
是否继续执行了?
是否继续执行了?
是否继续执行了?
停止了----