这就是我定义线程的方式

public class Countdown implements Runnable{

    public Countdown(){
        new Thread(this).start();
    }

    //...
}

如果以这种方式启动,仍然可以获得线程的状态吗?喜欢
 Countdown cd = new Countdown();
 cd.getState();

最佳答案



不它不是。

如果您希望能够获取状态,则必须保留对线程的引用;例如

public class Countdown implements Runnable{
    private final Thread t;

    public Countdown(){
        t = new Thread(this);
        t.start();
    }

    public Thread.State getState() {
        return t.getState();
    }
    // ...
}

顺便说一下,还有其他原因导致这种模式不完善:
  • 如果对Countdown对象的引用丢失(例如,由于父对象构建期间发生异常),则会泄漏线程。
  • 线程和线程创建消耗大量资源。如果这些Countdown对象很多,或者它们的生存期很短,那么最好使用线程池。
  • 10-01 09:18
    查看更多