如何终止掉一个线程?

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

文章目录

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

   }


相关文章
|
8月前
|
Python
|
JSON 安全 Java
【JavaSE专栏87】线程终止问题,什么情况下需要终止线程,如何终止Java线程?
【JavaSE专栏87】线程终止问题,什么情况下需要终止线程,如何终止Java线程?
130 2
|
API
如何让一个线程“优雅”地退出
如何让一个线程“优雅”地退出
190 0
|
监控 安全 Java
关闭线程的正确方法:“优雅”的中断
前文从任务到线程:Java结构化并发应用程序中介绍了如何安排任务启动线程。 线程在启动之后,正常的情况下会运行到任务完成,但是有的情况下会需要提前结束任务,如用户取消操作等。
1411 0
线程终止与回收
线程终止与回收
176 0
|
Java API
如何优雅地终止一个线程?
我们的系统肯定有些线程为了保证业务需要是要常驻后台的,一般它们不会自己终止,需要我们通过手动来终止它们。我们知道启动一个线程是start方法,自然有一个对应的终止线程的stop方法,通过stop方法可以很快速、方便地终止一个线程,我们来看看stop的源代码。
164 0
如何优雅地终止一个线程?
我们该如何正确的中断一个正在执行的线程??
当我们在调用Java对象的wait()方法或者线程的sleep()方法时,需要捕获并处理InterruptedException异常。如果我们对InterruptedException异常处理不当,则会发生我们意想不到的后果!今天,我们就以一个案例的形式,来为大家详细介绍下为何中断执行的线程不起作用。
173 0

热门文章

最新文章

相关实验场景

更多