zoukankan      html  css  js  c++  java
  • 4.3.3 thread对性能有何帮助

    public class ThreadLocalDemo {
    public static final int GE_COUNT = 10000000;
    public static final int THREAD_COUT = 4;

    static ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUT);
    public static Random random = new Random(123);

    public static ThreadLocal<Random> randomThreadLocal = new ThreadLocal<Random>() {
    protected Random initialValue() {
    return new Random(123);
    }
    };


    public static class RandomTask implements Callable<Long> {

    private int mode = 0;

    public RandomTask(int mode) {
    this.mode = mode;
    }

    public Random getRandom() {
    if (mode == 0) {
    return random;
    } else if (mode == 1) {
    return randomThreadLocal.get();
    } else {
    return null;
    }
    }


    public Long call() throws Exception {
    long b = System.currentTimeMillis();

    for (int i = 0; i < GE_COUNT; i++) {
    getRandom().nextInt();
    }
    long e = System.currentTimeMillis();
    System.out.println(Thread.currentThread().getName() + " spend" + (e - b) + "ms");
    return e - b;
    }
    }

    public static void main(String args[]) throws ExecutionException, InterruptedException {
    Future<Long>[] futures = new Future[THREAD_COUT];
    for (int i = 0; i < THREAD_COUT; i++) {
    futures[i] = executorService.submit(new RandomTask(0));
    }

    long totalTime = 0;

    for (int i = 0; i < THREAD_COUT; i++) {
    totalTime += futures[i].get();
    }
    System.out.println("多线程访问同一个Random实例:" + totalTime + "ms");
    executorService.shutdown();
    executorService=Executors.newFixedThreadPool(4);
    //ThreadLocal的情况
    for (int i = 0; i < THREAD_COUT; i++) {
    futures[i] = executorService.submit(new RandomTask(1));
    }
    totalTime = 0;
    for (int i = 0; i < THREAD_COUT; i++) {
    totalTime += futures[i].get();
    }
    executorService.shutdown();
    System.out.println("使用ThreadLocal包装Random实例:" + totalTime + "ms");

    }


    运行结果:

    pool-1-thread-3 spend1353ms
    pool-1-thread-1 spend1542ms
    pool-1-thread-2 spend1573ms
    pool-1-thread-4 spend1593ms
    多线程访问同一个Random实例:6061ms
    pool-2-thread-1 spend531ms
    pool-2-thread-2 spend512ms
    pool-2-thread-3 spend450ms
    pool-2-thread-4 spend414ms
    使用ThreadLocal包装Random实例:1907ms




  • 相关阅读:
    数据结构基础(二)排序算法
    数据结构基础(一) 时间空间复杂度分析
    347. Top K Frequent Elements, O(N) solution
    409. Longest Palindrome
    556. Next Greater Element III
    CH0103 最短Hamilton路径(状压DP)
    牛客OI周赛13-提高组A-0还是1(简单DP)
    Codeforces Round #678 (Div. 2) C. Binary Search(二分查找/思维/排列组合)
    Codeforces Round #677 (Div. 3) A-E
    函数实现复合命题的计算及判断两个命题是否等值——中缀表达式转后缀表达式
  • 原文地址:https://www.cnblogs.com/anxbb/p/8651524.html
Copyright © 2011-2022 走看看