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

Why is my multithreaded program executing sequentially?

以下程序不应该按顺序执行,但它仍在按顺序执行。

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

你能告诉我为什么这样执行吗? 仅当 运行

时才应该按顺序执行吗

线程做的工作太少以至于它们在切换到下一个线程之前完成。

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

线程的创建和启动是有性能开销的,不是简单的轻量级操作。结果,它消耗了一些资源。

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

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

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