Raj*_*Raj 3 java concurrency multithreading
我想了解下面的程序.如果我调用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 Code Online (Sandbox Code Playgroud)
Pet*_*rey 11
当你打电话时,你run()在同一个线程中这样做.它只是一个方法调用.
当你打电话start()给另一个线程来触发时run()
这是扩展Thread不是一个好主意的原因之一,而是实现了用线程包装的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();
}
Run Code Online (Sandbox Code Playgroud)
版画
Thread-0 - RUNNABLE
Run Code Online (Sandbox Code Playgroud)
你能找出原因吗?
| 归档时间: |
|
| 查看次数: |
895 次 |
| 最近记录: |