java - 不懂Thread o/p

标签 java multithreading

我正在学习scjp, 我的问题如下:

public class Bunnies extends Thread{


    public static void main(String[] args) {
        Thread t = new Thread(new Bunnies());
        Thread t1 = new Thread(new Bunnies());
        t.start();
        t1.start();

    }
    public  void run()
    {
        for(int i=0; i<3; i++)
        {
            System.out.println(Thread.currentThread().getName()+"  ");
        }
    }

}

当我运行上面的程序时,我得到如下的 o/p:

Thread-1  
Thread-1  
Thread-1  
Thread-3  
Thread-3  
Thread-3  

这里我不明白为什么这里没有显示Thread-2,只有Thread 1&3。

请解释。

最佳答案

每次您创建一个扩展 ThreadBunnies 时,您也会创建一个 Thread,因此会出现数字差距。

您的第一次运行:Thread t = new Thread(new Bunnies());new Bunnies()Thread-0tThread-1
然后运行 ​​Thread t1 = new Thread(new Bunnies());new Bunnies()Thread-2t1Thread-3

但是请注意,您不应依赖线程编号为 the javadoc不保证数字是连续的。

您可以使用此代码进行验证:

public static void main(String[] args) {
    Bunnies b = new Bunnies();
    Thread t = new Thread(b);
    Bunnies b1 = new Bunnies();
    Thread t1 = new Thread(b1);
    System.out.println(b.getName()); //Thread-0
    System.out.println(t.getName()); //Thread-1
    System.out.println(b1.getName()); //Thread-2
    System.out.println(t1.getName()); //Thread-3
}

关于java - 不懂Thread o/p,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13913424/

相关文章:

java - boolean 值不变

java - 安卓。如何捕捉键盘隐藏的时刻?

c++ - 独立于消耗原子负载的变量对操作有什么影响吗?

c# - 检测线程数组的完成

java - ByteBuffer的初始 "mode"是什么?

java - 在不指定类型的情况下子类化泛型类时无法识别的泛型父字段

Java Rest 应用程序在 HTML 中打印结果时出现问题

java - 为什么不能在 Thread 实例中使用 notifyAll()?

java - 在这种情况下 Spark 内部是如何工作的?

java - 内存一致性错误与线程干扰