下面给出了一个代码,演示了在java多线程中使用isAlive()...
我无法解释显示的输出序列。我期望的输出是r1 r1 true true r2 r2
任何人都可以帮助我。
public class MyThread extends Thread
{
public void run()
{
System.out.println("r1 ");
try {
Thread.sleep(200);
}
catch(InterruptedException ie) { }
System.out.println("r2 ");
}
public static void main(String[] args)
{
MyThread t1=new MyThread();
MyThread t2=new MyThread();
t1.start();
t2.start();
System.out.println(t1.isAlive());
System.out.println(t2.isAlive());
}
}
输出: R1 真正 真正 R1 R2 r2
答案 0 :(得分:-2)
输出
r1
true
true
r1
r2
r2
如果两个线程都在运行但是其中一个(可能但不一定是第二个)已经开始运行但尚未到达System.out.println("r1")
,那么这是完全合理的。
没有进一步的同步结构,这是"竞争条件"的简单示例。
竞争条件或种族危害是电子行为, 软件或其他输出依赖于的系统 其他无法控制的事件的顺序或时间。
https://en.wikipedia.org/wiki/Race_condition
注意:PrintStream
(System.out
是其中的一个实例)不保证是线程安全的,因此至少在理论上可能会丢失一些打印件。