为什么我的多线程程序是顺序执行的?
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,而不是像上面那样按顺序启动。那么你可能会看到不同的结果。
以下程序不应该按顺序执行,但它仍在按顺序执行。
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,而不是像上面那样按顺序启动。那么你可能会看到不同的结果。