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
你能告诉我为什么要这样行刑吗? 难道执行不应该只有在运行时才有顺序吗
# 1 楼答案
当新的A()时。调用start(),创建一个新线程并开始执行。然后是新的A()。start()返回。当新的B()时。start()被称为正在创建的线程。在这段时间内,线程A将完成执行并返回,因为创建新线程是一个代价高昂且阻塞的调用。同样的事情也发生在线程C上,因为线程B在线程C开始执行之前就已经完成了。因此,它们仍在并行执行。但在下一个启动之前,一个正在完成。试着平行启动A、B和C,而不是像上面那样按顺序启动。然后你可能会看到不同的结果
# 2 楼答案
线程所做的工作非常少,以至于它们在切换到下一个线程之前就完成了
尝试将循环数增加到100000或更多
# 3 楼答案
创建和启动线程会降低性能,这不是一个简单的轻松操作。因此,它会消耗一些资源
在您的示例中,您的run方法非常简单(打印时循环超过5 int)。这段代码很轻,执行速度很快
我认为每个循环的执行都是在创建下一个线程之前退出的。尝试添加一个线程。sleep()进入循环,增加增量的数量,或者做一些更复杂的事情