如何终止掉一个线程?

简介: 如何终止掉一个线程?

文章目录

本文以JDK1.8为例,进行测试

如何终止一个线程的执行?

1.stop方法

public static void main(String[] args) throws InterruptedException {

       Thread t1 = new Thread(()->{

          for(int i = 0; i <10 ; i++){

              try {

                  TimeUnit.SECONDS.sleep(1);

              } catch (InterruptedException e) {

                  throw new RuntimeException(e);

              }

              System.out.println("i="+i);

          }

       });

       t1.start();

       TimeUnit.SECONDS.sleep(2);

       t1.stop();

 

   }

stop方法已经过时了

2.suspend

public static void main(String[] args) throws InterruptedException {

       Thread t1 = new Thread(()->{

          for(int i = 0; i <10 ; i++){

              try {

                  TimeUnit.SECONDS.sleep(1);

              } catch (InterruptedException e) {

                  throw new RuntimeException(e);

              }

              System.out.println("i="+i);

          }

       });

       t1.start();

       TimeUnit.SECONDS.sleep(2);

       t1.suspend();

       TimeUnit.SECONDS.sleep(3);

       t1.resume();

   }

suspend也已经过时

3.使用volatile设置标志

 static volatile boolean Running = true;

   public static void main(String[] args) {

       Thread t1 = new Thread(()->{

           while(Running){

               try {

                   TimeUnit.SECONDS.sleep(1);

               } catch (InterruptedException e) {

                   throw new RuntimeException(e);

               }

               System.out.println("正在运行...");

           }

           System.out.println("t1 结束....");

       });

       t1.start();

       try {

           TimeUnit.SECONDS.sleep(3);

       } catch (InterruptedException e) {

           throw new RuntimeException(e);

       }

       //设置false

       Running = false;

4.interrupt 中断线程

public static void main(String[] args) {

       Thread t1 = new Thread(()->{

           while(!Thread.interrupted()){

               try {

                   TimeUnit.SECONDS.sleep(1);

               } catch (InterruptedException e) {

                   throw new RuntimeException(e);

               }

               System.out.println("interrupted");

           }

           System.out.println("t1线程结束...");

       });

       t1.start();

       try {

           TimeUnit.SECONDS.sleep(3);

       } catch (InterruptedException e) {

           throw new RuntimeException(e);

       }

       t1.interrupt();

   }

5.Interrupt和LockSupport结合使用

public static void main(String[] args) {

       Thread t = new Thread(() -> {

           System.out.println("开始执行...");

           LockSupport.park(); //线程阻塞

           System.out.println("执行结束...");

       });

       t.start();

       try {

           TimeUnit.SECONDS.sleep(1);

       } catch (InterruptedException e) {

           throw new RuntimeException(e);

       }

       t.interrupt();

   }


相关文章
|
9月前
如何停止一个正在运行的线程
如何停止一个正在运行的线程
48 1
|
10月前
|
算法
|
API
如何让一个线程“优雅”地退出
如何让一个线程“优雅”地退出
136 0
线程终止与回收
线程终止与回收
117 0
|
Java
36. 说说 如何停止一个正在运行的线程?上
36. 说说 如何停止一个正在运行的线程?上
112 0
|
物联网 Linux 开发者
线程被取消的时候执行清理函数|学习笔记
快速学习线程被取消的时候执行清理函数
82 0
线程被取消的时候执行清理函数|学习笔记
|
Java API
如何优雅地终止一个线程?
我们的系统肯定有些线程为了保证业务需要是要常驻后台的,一般它们不会自己终止,需要我们通过手动来终止它们。我们知道启动一个线程是start方法,自然有一个对应的终止线程的stop方法,通过stop方法可以很快速、方便地终止一个线程,我们来看看stop的源代码。
127 0
如何优雅地终止一个线程?
|
Java API
如何"优雅"地终止一个线程?
​ 我们的系统肯定有些线程为了保证业务需要是要常驻后台的,一般它们不会自己终止,需要我们通过手动来终止它们。我们知道启动一个线程是start方法,自然有一个对应的终止线程的stop方法,通过stop方法可以很快速、方便地终止一个线程,我们来看看stop的源代码。
1269 0

相关实验场景

更多