如何终止掉一个线程?

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

文章目录

本文以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();

   }


相关文章
|
10月前
|
监控 测试技术 程序员
解决线程死循环问题的有效方法
作为开发者想必都清楚,多线程应用程序的开发为我们日常开发工作中提供了并发执行任务的能力,但线程死循环问题却是一个常见而令人头疼的挑战,因为线程死循环可能导致系统的不稳定性、资源浪费以及应用程序的异常运行,所以准确地定位和妥善处理线程死循环现象,并在编码阶段就避免潜在风险,成为开发人员必须面对的重要问题,线程死循环问题的解决不仅有助于提高系统的稳定性和可用性,还能优化资源利用和提升应用程序的性能,通过采取适当的预防和处理措施,开发人员能够避免线程陷入无尽的循环,并及时发现和解决潜在问题。那么本文就来分享一下关于如何处理线程死循环问题,以及如何在编码阶段规避潜在风险。
305 2
解决线程死循环问题的有效方法
|
JSON 安全 Java
【JavaSE专栏87】线程终止问题,什么情况下需要终止线程,如何终止Java线程?
【JavaSE专栏87】线程终止问题,什么情况下需要终止线程,如何终止Java线程?
146 2
|
API
如何让一个线程“优雅”地退出
如何让一个线程“优雅”地退出
200 0
线程终止与回收
线程终止与回收
184 0
|
Java API
如何优雅地终止一个线程?
我们的系统肯定有些线程为了保证业务需要是要常驻后台的,一般它们不会自己终止,需要我们通过手动来终止它们。我们知道启动一个线程是start方法,自然有一个对应的终止线程的stop方法,通过stop方法可以很快速、方便地终止一个线程,我们来看看stop的源代码。
171 0
如何优雅地终止一个线程?
|
Java API
如何"优雅"地终止一个线程?
​ 我们的系统肯定有些线程为了保证业务需要是要常驻后台的,一般它们不会自己终止,需要我们通过手动来终止它们。我们知道启动一个线程是start方法,自然有一个对应的终止线程的stop方法,通过stop方法可以很快速、方便地终止一个线程,我们来看看stop的源代码。
1315 0