如果我有一个类Foo,如果我调用方法doSomething()
,则实例可以创建一个线程,并且我的主线程中有一个Foo实例列表。
class Foo()
{
private Thread t;
public void doSomething()
{
t = new Thread(() -> {
while(!isInterrupted())
{
//do something
}
});
t.start();
}
}
doSomething
并且实例创建了一个线程,它将不会被垃圾收集? 因此,我必须在Foo中添加一个方法,如:
public void stop()
{
if(t != null)
{
t.interrupt();
}
}
如果我在Foo中代替线程ExecutorService
而不是:
scheduler = Executors.newSingleThreadScheduledExecutor();
sf = scheduler.scheduleAtFixedRate(() -> {/*do something*/}, 0, 1, TimeUnit.SECONDS);
stop
方法? stop
方法在这种情况下会看起来像这样:
public void stop()
{
if(sf != null)
{
sf.cancel(true);
}
}
答案 0 :(得分:0)
答案在所有情况下都是肯定的(参见Peter Lawrey的评论除了问题之外)。