如何在java中使用多个核心?

时间:2016-05-04 18:52:08

标签: java multithreading

我试图了解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 个答案:

答案 0 :(得分:4)

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

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

程序的顺序部分(包括协调)根据Amdahl's law

来控制其性能