有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程如何在java中使用多核?

我试图理解java线程是如何与CPU内核一起工作的。我有一个4核CPU,当我尝试运行下面的代码时,执行时间很有趣。为什么多线程不能加速?我做错什么了吗

顺便说一下,availableProcessors()返回4

下面的代码需要将近27秒

        Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int x = 0;
            while(x < 10000000){
                System.out.println(x);
                x++;
            }
        }
    };

    Thread t1 = new Thread(runnable);

    t1.start();

当我使用多线程时,需要33秒

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int x = 0;
            while(x < 5000000){
                System.out.println(x);
                x++;
            }
        }
    };

    Runnable runnable2 = new Runnable() {
        @Override
        public void run() {
            int x = 5000000;
            while(x < 10000000){
                System.out.println(x);
                x++;
            }
        }
    };

    Thread t1 = new Thread(runnable);

    t1.start();


    Thread t2 = new Thread(runnable2);

    t2.start();

共 (1) 个答案

  1. # 1 楼答案

    您的程序有一个顺序瓶颈,正在打印到终端

    System.out.println中有一个同步块,因此每次写入一个,因此代码不是并行的

    程序的顺序部分(包括协调)是根据Amdahl's law控制其性能的部分