「java怎么关闭多个线程」java线程开启关闭

博主:adminadmin 2022-12-09 09:24:07 80

本篇文章给大家谈谈java怎么关闭多个线程,以及java线程开启关闭对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何优雅的关闭java线程

Java中终止线程的方式主要有三种:

1、使用stop()方法,已被弃用。原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的“残疾”数据,不符合完整性,所以被废弃。So, forget it!

2、使用volatile标志位

看一个简单的例子:

首先,实现一个Runnable接口,在其中定义volatile标志位,在run()方法中使用标志位控制程序运行:

public class MyRunnable implements Runnable {  

   

    //定义退出标志,true会一直执行,false会退出循环  

    //使用volatile目的是保证可见性,一处修改了标志,处处都要去主存读取新的值,而不是使用缓存  

    public volatile boolean flag = true;  

   

    public void run() {  

        System.out.println("第" + Thread.currentThread().getName() + "个线程创建");  

           

        try {  

            Thread.sleep(1000L);  

        } catch (InterruptedException e) {  

            e.printStackTrace();  

        }  

           

        //退出标志生效位置  

        while (flag) {  

        }  

        System.out.println("第" + Thread.currentThread().getName() + "个线程终止");  

    }  

}

然后,在main()方法中创建线程,在合适的时候,修改标志位,终止运行中的线程。

public class TreadTest {  

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

        MyRunnable runnable = new MyRunnable();  

           

        //创建3个线程  

        for (int i = 1; i = 3; i++) {  

            Thread thread = new Thread(runnable, i + "");  

            thread.start();  

        }  

        //线程休眠  

        Thread.sleep(2000L);  

        System.out.println("——————————————————————————");  

        //修改退出标志,使线程终止  

        runnable.flag = false;    

    }  

}

最后,运行结果,如下:

第1个线程创建

第2个线程创建

第3个线程创建

--------------------------

第2个线程终止

第1个线程终止

第3个线程终止

3、使用interrupt()中断的方式,注意使用interrupt()方法中断正在运行中的线程只会修改中断状态位,可以通过isInterrupted()判断。如果使用interrupt()方法中断阻塞中的线程,那么就会抛出InterruptedException异常,可以通过catch捕获异常,然后进行处理后终止线程。有些情况,我们不能判断线程的状态,所以使用interrupt()方法时一定要慎重考虑。

答案来源于我的另一个回答:。

java多线程开发 如何正确关闭线程

Thread.currentThread().interrupt(); //这个是获取当前线程并且中断当前线程。

public void interrupt()

中断线程

如果当前线程没有中断它自己(这在任何情况下都是允许的),则该线程的 checkAccess 方法就会被调用,这可能抛出 SecurityException。

如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个 InterruptedException。

如果该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。

java如何关闭线程

关闭线程有几种方法,

一种是调用它里面的stop()方法

另一种就是你自己设置一个停止线程的标记 (推荐这种)

代码如下:

package com.demo;

//测试Thread的stop方法和自己编写一个停止标记来停止线程;

public class StopThread implements Runnable{

//停止线程的标记值boolean;

private boolean flag = true;

public void stopThread(){

flag = false;

}

public void run(){

int i=0;

while(flag){

i++;

System.out.println(Thread.currentThread().getName()+":"+i);

try{

Thread.sleep(1000);

}catch(Exception e){

}

System.out.println(Thread.currentThread().getName()+"=="+i);

}

}

public static void main(String args[]){

StopThread st = new StopThread();

Thread th = new Thread(st);

Thread th1 = new Thread(st);

th.start();

th1.start();

try{

Thread.sleep(5500);

}catch(Exception e){

}

/*

如果使用Thread.stop方法停止线程,不能保证这个线程是否完整的运行完成一次

run方法;但是如果使用停止的标记位,那么可以保正在真正停止之前完整的运行完

成一次run方法;

*/

th.stop();

st.stopThread();

}

}

Java程序启动了多个线程, 如何在关闭程序前关闭这些线程?

************************省略

public void run()

{

    while(true)

    {

        //你是这样写的嘛?

    }

}

如何关闭java线程

好问题,Thread类的stop()方法已经废弃,不推荐使用了。

现在要关闭线程通常都是采用条件控制法。如果你的线程的run方法里面是while的循环,那么只要控制while条件,让它返回false线程的run方法就会结束,线程从而结束关闭。

java怎么关闭多个线程的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java线程开启关闭、java怎么关闭多个线程的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-09,除非注明,否则均为首码项目网原创文章,转载请注明出处。