我创建了一个技术上运行24 * 7的程序。
顺便说一下,当程序确实调用了新的Thread
时,会发生意外情况,就像线程没有运行一样,即使处理了指令。
我尝试以不同的方式启动我的帖子:
实例化并启动线程作为本地变量
void method()
{
new Thread(new Runnable(){...}).start();
}
与1相同,但将其分配给在主进程
上分配的对象Thread t; //member of class own by main process
void method()
{
t = new Thread(new Runnable(){...});
t.start();
}
使用executorservice作为委托人
ExecutorserviceObject.execute(new Runnable(){...});
我宁愿在1)长时间跑步而不是2)和3)。
我认为问题可能与垃圾收集器和/或线程调度程序有关。
这怎么可能发生?谁能详细说明封面下发生了什么?
答案 0 :(得分:0)
第一种情况和第二种情况非常相似。即使您没有将Thread
对象分配给字段/变量,它仍然可以在线程完成(正常或异常)之前保持强可达性。将其存储到字段中使得线程的进一步控制更容易(例如,加入或发送中断),但这不是必需的。
因此,从问题中发布的代码来看,第一和第二种情况之间应该没有真正的区别。您的问题很可能出现在另一段代码中。