【发布时间】:2014-02-03 02:56:04
【问题描述】:
无论是否创建了一些对象,我的程序都会启动一个线程。
Foo() {
t = new Thread(this);
t.start();
}
我正在我的线程中运行一些 while 循环。
while(bool){
// do something
}
我有一个线程控制 boolean bool 的值。但是如何在我的其他线程更改布尔值之前终止其中的一些?我认为设置 t = null 不起作用。有没有办法在线程停止运行之前对其进行垃圾收集?
【问题讨论】:
-
Thread 实例与底层执行线程无关。 GC 不会神奇地导致线程停止执行,就像 GC 文件实例不会删除文件一样。
-
需要注意的是
bool必须是volatile boolean,所以它可以被多个线程更改和读取。 -
不要从构造函数启动线程。新线程可以观察到处于未初始化状态的新对象。即使
start调用位于构造函数的末尾,也可能会发生这种情况,因为内存排序问题。改为编写静态工厂方法,在那里构造对象,然后然后启动线程。
标签: java multithreading terminate