public class Rpcraven {
public static void main(String argv[]) {
Pmcraven pm1 = new Pmcraven("One");
pm1.run();
Pmcraven pm2 = new Pmcraven("Two");
pm2.run(); }
}class Pmcraven extends Thread {
private String sTname = ""; Pmcraven(String s) {
sTname = s;
} public void run() {
for (int i = 0; i < 2; i++) {
try {
sleep(1000);
} catch (InterruptedException e) {
} yield();
System.out.println(sTname);
} }
}
按道理,运行结果应该是
one
two
one
two
可实际运行结果是
one
one
two
two
请问高手这是怎么回事?
public static void main(String argv[]) {
Pmcraven pm1 = new Pmcraven("One");
pm1.run();
Pmcraven pm2 = new Pmcraven("Two");
pm2.run(); }
}class Pmcraven extends Thread {
private String sTname = ""; Pmcraven(String s) {
sTname = s;
} public void run() {
for (int i = 0; i < 2; i++) {
try {
sleep(1000);
} catch (InterruptedException e) {
} yield();
System.out.println(sTname);
} }
}
按道理,运行结果应该是
one
two
one
two
可实际运行结果是
one
one
two
two
请问高手这是怎么回事?
循环了两次
Two
One
Two
One
同意,线程没有启动, 调用run()和调用普通类的普通方法没有区别。
PrimeRun p = new PrimeRun(143);
new Thread(p).start();
public class Rpcraven {
public static void main(String argv[]) {
Pmcraven pm1 = new Pmcraven("One"); Pmcraven pm2 = new Pmcraven("Two");
pm1.gogo();
pm2.gogo(); }
}class Pmcraven {
private String name;
Thread up;
Pmcraven(String name){
this.name=name;
}
void gogo(){
up=new Thread(new Runnable(){ public void run() {
// TODO Auto-generated method stub
for(int i=0;i<3;i++){
try {
Thread.sleep(1000);
// Thread.yield();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name);
}
}
});
up.start();
}
}
调用run()只是在主线程中执行run()方法,调用start()才是真正的多线程
线程没有启动!!start()启动线程