当前位置 : 主页 > 编程语言 > java >

Java单线程&多线程Benchmark

来源:互联网 收集:自由互联 发布时间:2021-06-28
Java8 跑分代码 import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Benchmark { //初始化得分 static int singleThreadScore = 0; static int multiThreadScore = 0; //无限循环跑分开关 st
Java8 跑分代码
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Benchmark {
    //初始化得分
    static int singleThreadScore = 0;
    static int multiThreadScore = 0;
    //无限循环跑分开关
    static boolean isContinue = true;

    public static void main(String[] args) throws InterruptedException {
        //去处理器逻辑核心数量
        int CPUs = Runtime.getRuntime().availableProcessors();
        System.out.println("逻辑处理器个数:" + CPUs);
        //创建单线程线程池
        ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
        //创建多线程线程池(大小为逻辑核心数2倍)
        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(CPUs * 2);
        System.out.println("正在进行单线程测试 ... ...");
        //进行单线程跑分
        singleThreadExecutor.execute(() -> doBenchmark(false));
        //跑5秒钟之后 循环开关设置为关闭 线程完成后 关闭线程池
        Thread.sleep(5000);
        isContinue = false;
        singleThreadExecutor.shutdown();
        Thread.sleep(1000);
        System.out.println("单线程得分:" + singleThreadScore);
        //打开循环开关
        isContinue = true;
        System.out.println("正在进行多线程测试 ... ...");
        //根据逻辑核心数的2倍创建多线程跑分
        for (int threads = 0; threads < CPUs * 2; threads++) {
            fixedThreadPool.execute(() -> doBenchmark(true));
        }
        //跑5秒钟之后 循环开关设置为关闭 线程完成后 关闭线程池
        Thread.sleep(5000);
        isContinue = false;
        fixedThreadPool.shutdown();
        Thread.sleep(1000);
        System.out.println("多线程得分:" + multiThreadScore);
    }

    static void doBenchmark(boolean isMultiThread) {
        int score = 0;
        //判断循环开关 无限循环跑分
        for (; isContinue; ) {
            //创建1000长度的数组
            int[] array = new int[1000];
            int insideInt = 100000;
            for (int i = 0; i < array.length; i++) {
                //数据从100000递减 添加至数组中
                array[i] = insideInt - i * 3;
            }
            bubble_sort(array);
            score++;
        }
        if (isMultiThread) {
            multiThreadScore += score;
        } else {
            singleThreadScore += score;
        }
    }

    //冒泡排序
    static void bubble_sort(int[] unsorted) {
        for (int i = 0; i < unsorted.length; i++) {
            for (int j = i; j < unsorted.length; j++) {
                if (unsorted[i] > unsorted[j]) {
                    int temp = unsorted[i];
                    unsorted[i] = unsorted[j];
                    unsorted[j] = temp;
                }
            }
        }
    }
}
网友评论