java - 为什么 Java 中线程是顺序运行而不是同时运行

标签 java multithreading

以下代码中的线程似乎不同时运行。但是,如果我将 number 更改为 100 万或将 Thread.sleep(50); 添加到循环中,它会同时运行。使线程 hibernate 会产生同质结果,同时将 number 增加到一百万会使每个线程在切换到其他线程之前打印 50 多行。具体原因是什么?

class RunnableDemo implements Runnable {
    int number = 4;
    private Thread t;
    private String threadName;
    RunnableDemo(String name) {
        threadName = name;
    }

    public void run() {
        System.out.println("----------");
        for (int i = number; i > 0; i--) {
            System.out.println("Thread: " + threadName + ", " + i);
        }

    }

    public void start() {
        System.out.println("Starting " + threadName);
            t = new Thread(this, threadName);
            t.start();

    }

}

public class Test {
    public static void main(String args[]) {

        RunnableDemo R1 = new RunnableDemo("Thread-1");
        RunnableDemo R2 = new RunnableDemo("Thread-2");

        R1.start();
        R2.start();
    }
}

这是当 number 为 4 时代码产生的输出:

Starting Thread-1
Starting Thread-2
----------
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
----------
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1

最佳答案

System.out.println缓冲。因此,您不能使用它来测试线程同时性。

关于java - 为什么 Java 中线程是顺序运行而不是同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27040119/

相关文章:

java - JPA 可在 Eclipse 上运行,但不能在 JAR 上运行

python - Python多线程时queue.Queue的正确实现

python - 在 Caffe 中的单独线程中预取数据

c# - Monitor.Enter(object,ref bool)锁获取的实现和顺序

Javacard通过Java代码获取已安装小程序的小程序AID

java - 单元测试 SQLiteDatabase 代码 - 如何在模拟器外部实例化数据库实例

java - 在终端中编译 java 应用程序

java - 如何在运行时更改线程的 Runnable 目标

python - 可停止线程错误

java - 循环遍历行并单击