1:codejava
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 ide
和1對比this
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: 異常拋出法退出線程spa
/**** 異常拋出法退出線程 ********/
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 暴力退出線程code
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 中止線程blog
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();
}
}
是否繼續執行了?
是否繼續執行了?
是否繼續執行了?
是否繼續執行了?
中止了----