我试图理解下面的程序。如果我调用 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;
}
}
最佳答案
当您调用 run()
时,您是在同一个线程中执行的。它只是一个方法调用。
当您调用 start()
时触发另一个线程调用 run()
这是扩展线程不是一个好主意的原因之一,而是实现用线程包装的 Runnable。这是许多潜在的混淆来源之一。
这是给你的相关预告片
static String name = "Peter Lawrey";
static String state = "Washington";
static String getName() {
return name;
}
static String getState() {
return state;
}
static class NamedThread extends Thread {
@Override
public void run() {
System.out.println(getName()+" - "+getState());
}
}
public static void main(String... args) throws InterruptedException {
new NamedThread().start();
}
打印
Thread-0 - RUNNABLE
你能找出原因吗?
关于java - java中的线程争用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7349010/