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
请问高手这是怎么回事?

解决方案 »

  1.   

    ding ding  bu dong !
      

  2.   

    for (int i = 0; i < 2; i++)
    循环了两次
      

  3.   

    应为调用的是run()而不是start()
      

  4.   

    单丛程序上看,是ONE ONE TWO TWO 呀
      

  5.   

    不过调用start()的结果是
    Two
    One
    Two
    One
      

  6.   


    同意,线程没有启动, 调用run()和调用普通类的普通方法没有区别。
      

  7.   

    应该start(),  run()现在就相当于普通方法,你应该知道线程的两种实现方法,看看那两种方法,没有一种在你的main里用到
      

  8.   

    下列代码会创建并启动一个线程: 
         PrimeRun p = new PrimeRun(143);
         new Thread(p).start();
      

  9.   

    只有调用了start()方法后,线程的方法体run()才会进入序列状态,否则就是普通方法调用
      

  10.   

    没想到是个陷阱,真是失策,失策啊。不过如果是start(),那结果又该是什么呢?
      

  11.   

    如果调用的是start()方法,则输出不确定,有各种可能
      

  12.   

    yield()让线程更加平均分配调度,基础
      

  13.   

    很抱歉,事实上不是那么一回事,
    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();
    }
    }
      

  14.   

    应为调用的是run()而不是start()
    调用run()只是在主线程中执行run()方法,调用start()才是真正的多线程
      

  15.   

    ^_^!
    线程没有启动!!start()启动线程