ran*_*psp 6 java multithreading
在下面的示例中,新的Thread()没有任何引用.它是否有可能被垃圾收集在它下面?也没有扩展Thread类或实现runnable,我们如何创建一个线程?
public class TestFive {
private int x;
public void foo() {
int current = x;
x = current + 1;
}
public void go() {
for(int i = 0; i < 5; i++) {
new Thread() {
public void run() {
foo();
System.out.print(x + ", ");
}
}.start();
}
}
public static void main(String args[]){
TestFive bb = new TestFive();
bb.go();
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*n C 12
一个尚未启动的新线程将以正常方式无法访问时进行垃圾回收.
已启动的新线程将成为垃圾收集"root".它完成之前(之后)不会被垃圾收集.
在下面的示例中,新的Thread()没有任何引用.它是否有可能被垃圾收集在它下面?
不,它已经启动,因此在完成/死亡之前不会被垃圾收集.它确实有一个可达的参考,直到(至少)start()呼叫返回的点.
也没有扩展Thread类或实现runnable,我们如何创建一个线程?
在你的榜样,你已经创建的匿名子类Thread; 即一个延伸的类Thread.