在运行以下代码时,随机结果即将发布。随机结果如下:
当我运行代码时,第一个出现的结果是
B = 1,B = 2,B = 3,B = 4,B = 5,退出B,A = 1,A = 2,A = 3,A = 4,A = 5,退出A
下次
B = 1,B = 2,A = 1,A = 2,A = 3,A = 4,A = 5,B = 3,B = 4,A = 5,从B出口,从A出口。
为什么?
class A extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
if(i==3) yield();
System.out.println("A="+i);
}
System.out.println("Exit from A");
}
}
class B extends Thread
{
public void run()
{
for(int j=1;j<=5;j++)
{
System.out.println("B="+j);
}
System.out.println("Exit from B");
}
}
class T
{
public static void main(String args[])
{
A obj1=new A();
B obj2=new B();
obj1.start();
obj2.start();
}
}
答案 0 :(得分:0)
您无法保证执行的顺序。调用start()并不意味着会立即调用run(),它会在选择运行你的线程时依赖于线程调度程序。
您根本不使用同步,因此您永远不知道哪个线程拦截执行。
答案 1 :(得分:0)
您没有在线程同步上使用任何控件(锁,信号量,障碍等)。所以基本上你不能指望任何明确的代码输出。
你永远无法猜测一组自由运行的线程的执行顺序。它几乎取决于
从您的代码中,我认为您正在尝试以yield();
的方式进行实验。而且您的代码不会给您任何支持。可悲的是,你正在尝试的代码对你没有帮助。 This问题为此目的提供了3,4个好的答案和示例。 :))