有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么我的多线程程序按顺序执行?

下面的程序不应该按顺序执行,但它仍在按顺序执行

class A extends Thread
{

    public void run()
    {
        for(int i=0; i<=5; i++)
        {
            System.out.println("Thread A : "+i);
        }
        System.out.println("exit from A");
    }
}

class B extends Thread
{
    public void run()
    {
        for(int j=0; j<=5; j++)
        {
            System.out.println("Thread B: "+j);
        }
        System.out.println("exit from B");
    }
}

class C extends Thread
{
    public void run()
    {
        for(int k=0; k<=5; k++)
        {
            System.out.println("Thread C : "+k);
        }
        System.out.println("exit from C");
    }
}

class ThreadCounter
{
    public static void main(String arg[])
    {
        new A().start();
        new B().start();
        new C().start();
    }
}

我得到的结果是:

Thread A start
Thread A : 1
Thread A : 2
Thread A : 3
Thread A : 4
Thread A end
Thread B start
Thread B : 1
Thread B : 2
Thread B : 3
Thread B : 4
Thread B end
Thread C start
Thread C : 1
Thread C : 2
Thread C : 3
Thread C : 4
Thread C end

你能告诉我为什么要这样行刑吗? 难道执行不应该只有在运行时才有顺序吗


共 (3) 个答案

  1. # 1 楼答案

    当新的A()时。调用start(),创建一个新线程并开始执行。然后是新的A()。start()返回。当新的B()时。start()被称为正在创建的线程。在这段时间内,线程A将完成执行并返回,因为创建新线程是一个代价高昂且阻塞的调用。同样的事情也发生在线程C上,因为线程B在线程C开始执行之前就已经完成了。因此,它们仍在并行执行。但在下一个启动之前,一个正在完成。试着平行启动A、B和C,而不是像上面那样按顺序启动。然后你可能会看到不同的结果

  2. # 2 楼答案

    线程所做的工作非常少,以至于它们在切换到下一个线程之前就完成了

    尝试将循环数增加到100000或更多

  3. # 3 楼答案

    创建和启动线程会降低性能,这不是一个简单的轻松操作。因此,它会消耗一些资源

    在您的示例中,您的run方法非常简单(打印时循环超过5 int)。这段代码很轻,执行速度很快

    我认为每个循环的执行都是在创建下一个线程之前退出的。尝试添加一个线程。sleep()进入循环,增加增量的数量,或者做一些更复杂的事情