java多线程

时间:2017-09-03 13:29:27

标签: java multithreading

下面给出了一个代码,演示了在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

1 个答案:

答案 0 :(得分:-2)

输出

r1
true 
true 
r1 
r2 
r2

如果两个线程都在运行但是其中一个(可能但不一定是第二个)已经开始运行但尚未到达System.out.println("r1"),那么这是完全合理的。

没有进一步的同步结构,这是"竞争条件"的简单示例。

  

竞争条件或种族危害是电子行为,   软件或其他输出依赖于的系统   其他无法控制的事件的顺序或时间。

https://en.wikipedia.org/wiki/Race_condition

注意:PrintStreamSystem.out是其中的一个实例)不保证是线程安全的,因此至少在理论上可能会丢失一些打印件。