- 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();
- }
- }
是否继续执行了?
是否继续执行了?
是否继续执行了?
是否继续执行了?
停止了 ----
来源: http://www.bubuko.com/infodetail-2534680.html