您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java为什么不在构造函数中启动线程?如何终止?

Java为什么不在构造函数中启动线程?如何终止?

你的第一个问题:在构造函数中启动一个线程,并传递this escapes this。这意味着你实际上是在完全构造对象之前给出对对象的引用。该线程将在构造函数完成之前启动。这会导致各种奇怪的行为。

关于第二个问题:在Java中没有强制其他线程停止的方法,因此你将使用一个变量,线程将检查该变量以知道是否应该停止。另一个线程将其设置为指示第一个线程将停止。该变量必须是易失性的,或者所有访问都必须同步,以确保正确发布。这是一些你想要的代码

public class MyNewThread implements Runnable {

    private final Thread t;
    private volatile boolean shouldStop = false;

    MyNewThread() {
        t = new Thread (this, "Data Thread");
    }

    public void start() {
        t.start();
    }

    public void stop() {   
         shouldStop = true;
    }

    public void run()  {
         while(!shouldStop)
         {
             // do stuff
         }
    }
}

任何想要创建和启动线程的方法都会:

MyNewThread thread = new MyNewThread();
thread.start();

想要停止线程的任何事情都会做:

thread.stop();
java 2022/1/1 18:23:32 有460人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶