public class Maintest
{
public static void main(String args[])
{
ThreadDemo thr = new ThreadDemo();
thr.start();
for(int i=1;i<1000;i++)
{
System.out.println("main: "+i);
}

}
}
class ThreadDemo extends Thread
{
public void run()
{
for(int i=1;i<1000;i++)
{
System.out.println(this.getName()+ ":"+i);
try{
   this.sleep(100);
   }catch(InterruptedException e){}
}
}
}

解决方案 »

  1.   

    没有bug,不需要调试.
    这个例子很好.
    你多运行几遍,正好能发现两个线程的输出结果是如何交叉,混在一起的.每次运行的结果基本是不会一样的,很生动.
      

  2.   

    手机回复?强.
    CSDN无处不在.
      

  3.   

    如果你想让主线程和子线程随机交替输出,你需要System.out.println("main: "+i);前后也加一个Thread.sleep()语句如果你想让主线程和子线程严格地交替输出,你需要通过synchronized来同步否则,你的程序跑起来没有问题。
      

  4.   

    自己写的啊,算是进步了,你java基础还是有点,只是理论性基础太差了,觉得你应该看书,书上网友写的好,网友可能会因为文字问题自身理解问题误导你,
    你相信书还是相信网友,自己抉择吧。
      

  5.   

    运行没有错.你还是没有理解多线程的实质,因为main线程和Thread_0交替执行,从而导致了输出的错乱,所以你需要同步机制,就像7楼说的,进而学习synchronized的用法,多线程里的问题很多,很复杂,而且不容易发现问题,调试困难.
    自己写例子,的确是进步了,鼓励,但还是建议 勿在浮沙筑高台,基础打好了学这东西就快了.
      

  6.   

    有两点原因可能导致你一直不理解
    1.cpu运算速度太快了,你测试的数据对它来说就是瞬间完成,这个瞬间小于轮转时间片
    同一代码在不同pc上执行结果都是不一样的
    2.时间片切换不是一定精确发生的,有一定几率在里面。
      

  7.   

    先声明yield不能保证退出时间片后,一定会将转让权交给谁,你的这个例子里面只有两个线程,所以几乎可以模拟
    但下面的例子是不严谨的。public class Maintest {
    public static void main(String args[]) {
    ThreadDemo thr = new ThreadDemo();
    thr.start();
    for (int i = 1; i < 1000; i++) {
    System.out.println("main: " + i);
    Thread.yield();
    } }
    }class ThreadDemo extends Thread {
    public void run() {
    for (int i = 1; i < 1000; i++) {
    System.out.println(this.getName() + ":" + i);
    Thread.yield();
    }
    }
    }