我试图理解下面的程序。如果我调用 new ReaderThread().start()
它工作正常,但如果我调用 new ReaderThread().run()
,应用程序进入无限循环。有什么区别?
public class Contention {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready){
System.out.println("ready ..."+ready);
Thread.yield();}
System.out.println(number);
// }
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ReaderThread().run();
number = 42;
ready = true;
}
}
最佳答案
如果你使用 new ReaderThread().start();
,你实际上是在创建一个新的线程实例,它将在后台运行并且 main()
继续执行它的进一步执行。
但是 new ReaderThread().run();
创建了此类的一个实例并对 run()
方法进行了正常的方法调用,因此 main()
必须等到 run()
完成执行并将控制权返回给 main(),在您的情况下,这是一个无限循环。
如果您想启动一个新线程,然后使用 ReaderThread().start();
启动,这是启动线程的正确方法,没有其他选择。
关于java - java中的线程争用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7349010/