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

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

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();


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5427426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存