多线程系列四:停止多线程,你不会还以为是用stop和destroy吧?

在学习Java的道路上,是否路过多线程时总让你很迷惘;很不巧,我也是,而使我们感到很迷惘主要原因都源于没有对概念的深深的理解和实践。所以我决定漫步Java多线程,同你一起会会多线程。

多线程系列

多线程系列一:理解多线程在于深深地理解了多任务、进程、多线程、线程
多线程系列二:手撕多线程,从会三种创建多线程方式开始:除了常见的两种,你是否了解Callable接口方式?
多线程系列三:初遇并发问题:从一个小故事开始,从一行行代码开始**
多线程系列四:停止多线程,你不会还以为是用stop和destroy吧?
多线程系列五:多线程为何要使用休眠?
多线程系列六:线程礼让与强制执行
多线程系列七:纯手绘图解多线程状态+代码示例,就问你怕了吗?

停止线程已经不推荐使用已经废弃的JDK的 stop()destroy() 方法。

而推荐线程自己停止下来。

建议可以使用一个标志位进行终止变量,当变量为false,则终止线程运行。

不仅IDEA开发工具会提示你已弃用。
在这里插入图片描述
打开源码也能看到源码里已注解弃用该 stopdestroy

在这里插入图片描述
在这里插入图片描述
可能有小伙伴很困惑,为何要把stop弃用呢?

因为 stop 停止线程,但是并未把线程执行完,这会导致没有释放资源。

destroy()呢?

只是抛出了一个NoSuchMethodError,没干什么事情。

扫描二维码关注公众号,回复: 11580904 查看本文章

而对比下面的代码可以看到输出线程结束后,释放这些线程资源。

public class ThreadDemo implements Runnable{

    private boolean sign = true;

    @Override
    public void run() {
        int i = 0;
        while (sign){
            System.out.println("run..."+i++);
        }
    }
    public void myStop(){
        this.sign = false;
    }
    public static void main(String[] args) {
        ThreadDemo t = new ThreadDemo();
        new Thread(t).start();
        for (int i = 1; i <=10; i++) {
            System.out.println("main-"+i);
            if (i==5){
                t.myStop();
                System.out.println("停止线程了");
            }
        }
    }
}

在这里插入图片描述
最后:

为了更好的阅读体验,我把想说的话都放在了下面,嘿嘿。

我是一颗剽悍的种子 把我会的,认真的分享 是我写博客一直不变的信条。
如果你能看到这篇博文,说明咱们还是很有缘的;希望能带给你一些许帮助,创作的不易,
把我文章的知识带走,你的三连留下,点赞,评论,关注,是我最大的动力。

猜你喜欢

转载自blog.csdn.net/A_hxy/article/details/107888076