Java 多執行緒 學習筆記(二)停止執行緒的幾種方法
1.異常法:
package test;
import exthread.MyThread;
import exthread.MyThread;
public class Run {
public static void main(String[] args) {
try {
MyThread thread = new MyThread();
thread.start();
Thread.sleep(2000);
thread.interrupt();
} catch (InterruptedException e) {
System.out.println("main catch");
e.printStackTrace();
}
System.out.println("end!");
}
}
package exthread;
public class MyThread extends Thread {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public void run() {
<span style="white-space:pre"> </span>super.run();
<span style="white-space:pre"> </span>for (int i = 0; i < 500000; i++) {
<span style="white-space:pre"> </span>if (this.interrupted()) {
<span style="white-space:pre"> </span>System.out.println("已經是停止狀態了!我要退出了!");
<span style="white-space:pre"> </span>break;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("i=" + (i + 1));
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>System.out.println("我被輸出,如果此程式碼是for又繼續執行,執行緒並未停止!");
<span style="white-space:pre"> </span>}
}
執行結果:
......
i=255229
i=255230
i=255231
i=255232
i=255233
i=255234
i=255235
i=255236
i=255237
i=255238
i=255239
i=255240
i=255241
i=255242
i=255243
i=255244
i=255245
i=255246
i=255247
i=255248
i=255249
i=255250
i=255251
i=255252
i=255253
i=255254
i=255255
i=255256
i=255257
i=255258
i=255259
i=255260
i=255261
i=255262
i=255263
i=255264
i=255265
i=255266
已經是停止狀態了!我要退出了!
end!
我被輸出,如果此程式碼是for又繼續執行,執行緒並未停止!
已經是停止狀態了!我要退出了! 雖然停止,但是for迴圈以後的程式碼還是會執行的
正確的退出方式
package exthread;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
try {
for (int i = 0; i < 500000; i++) {
if (this.interrupted()) {
System.out.println("已經是停止狀態了!我要退出了!");
throw new InterruptedException();
}
System.out.println("i=" + (i + 1));
}
System.out.println("我在for下面");
} catch (InterruptedException e) {
System.out.println("進MyThread.java類run方法中的catch了!");
e.printStackTrace();
}
}
}
2.在沉睡中停止
package exthread;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
try {
System.out.println("run begin");
Thread.sleep(200000);
System.out.println("run end");
} catch (InterruptedException e) {
System.out.println("在沉睡中被停止!進入catch!"+this.isInterrupted());
e.printStackTrace();
}
}
}
package test;
import exthread.MyThread;
import exthread.MyThread;
public class Run {
public static void main(String[] args) {
try {
MyThread thread = new MyThread();
thread.start();
Thread.sleep(200);
thread.interrupt();
} catch (InterruptedException e) {
System.out.println("main catch");
e.printStackTrace();
}
System.out.println("end!");
}
}
執行結果:
run begin
end!
在沉睡中被停止!進入catch!false
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at exthread.MyThread.run(MyThread.java:9)
另外一種情況是先停止後sleep
3.暴力停止:
Thread.stop() 這種方法存在非執行緒安全問題。所以暫時不考慮
4.使用return 停止執行緒
package test.run;
import extthread.MyThread;
public class Run {
public static void main(String[] args) throws InterruptedException {
MyThread t=new MyThread();
t.start();
Thread.sleep(2000);
t.interrupt();
}
}
package extthread;
public class MyThread extends Thread {
@Override
public void run() {
while (true) {
if (this.isInterrupted()) {
System.out.println("停止了!");
return;
}
System.out.println("timer=" + System.currentTimeMillis());
}
}
}
相關文章
- java 多執行緒之使用 interrupt 停止執行緒的幾種方法Java執行緒
- 【java多執行緒】(二)執行緒停止Java執行緒
- Java 多執行緒學習筆記Java執行緒筆記
- Java多執行緒學習筆記(自用)Java執行緒筆記
- 多執行緒筆記 二執行緒筆記
- Java多執行緒學習——執行緒通訊Java執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- Java多執行緒筆記Java執行緒筆記
- Java多執行緒學習(一)Java多執行緒入門Java執行緒
- Python學習筆記 - 多執行緒Python筆記執行緒
- 多執行緒學習(二)執行緒
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- #大學#Java多執行緒學習02(執行緒同步)Java執行緒
- Thinking in Java---多執行緒學習筆記(2)ThinkingJava執行緒筆記
- Java多執行緒學習Java執行緒
- 【Java多執行緒】輕鬆搞定Java多執行緒(二)Java執行緒
- java 停止執行緒Java執行緒
- Thinking in Java--Java多執行緒學習筆記(1)ThinkingJava執行緒筆記
- Java多執行緒學習(1)建立執行緒與執行緒的生命週期Java執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- 多執行緒併發篇——如何停止執行緒執行緒
- 多執行緒筆記執行緒筆記
- Java建立多執行緒的一種方法Java執行緒
- 多執行緒學習一(多執行緒基礎)執行緒
- Java多執行緒-執行緒中止Java執行緒
- 【多執行緒高併發程式設計】二 實現多執行緒的幾種方式執行緒程式設計
- Java 多執行緒NIO學習Java執行緒
- Java多執行緒學習(八)執行緒池與Executor 框架Java執行緒框架
- C# 多執行緒學習筆記 – 1C#執行緒筆記
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- 多執行緒(五)---執行緒的Yield方法執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- 多執行緒Demo學習(執行緒的同步,簡單的執行緒通訊)執行緒
- Java多執行緒學習筆記(六) 長樂未央篇Java執行緒筆記
- Java多執行緒之執行緒中止Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- java 多執行緒守護執行緒Java執行緒