java线程调度问题

时间:2016-01-27 03:38:02

标签: java multithreading

我已经将ThreadA和ThreadB定义为以下内容,而在main()方法中,我只是做了

 new ThreadA().start();  new ThreadB().start();

所以我看到char“A”和“B”的交错打印,这对我来说很有意义。但我发现无论我运行多少次程序,都会先打印“A”。这只是巧合,还是因为我首先打电话给A的start()?

另外,一旦我在for循环之前在A的run()中引入了一些延迟,或者我首先开始调用B的run(),那么我会先看到B打印。

请帮助我理解这一点。 感谢。

class ThreadA extends Thread
{ 
   @Override
    public void run() {

        // TODO Auto-generated method stub
        for (int i =0;i<10;i++)
        {
            System.out.println("A");
            long start = System.currentTimeMillis();
            for(;;)
            {
                if (System.currentTimeMillis() -start > 100)
                    break;
            }
        }

    }
}

class ThreadB extends Thread
{


    @Override
    public void run() {

        for (int i =0;i<10;i++)
        {
            System.out.println("B");
            long start = System.currentTimeMillis();
            for(;;)
            {
                if (System.currentTimeMillis() -start > 100)
                    break;
            }
        }
    }
}

0 个答案:

没有答案