标签:代码 cal 处理 task end ide blog demo ble
public class RandomDemo { public static final int GET_COUNT = 10000000; public static final int THREAD_COUNT = 4; static ExecutorService exe = Executors.newFixedThreadPool(THREAD_COUNT); public static Random rnd = new Random(123); public static ThreadLocal<Random> tRnd = new ThreadLocal<Random>() { @Override protected Random initialValue() { return new Random(123); } }; public static class RndTask implements Callable<Long> { private int mode = 0; public RndTask(int mode) { this.mode = mode; } public Random getRondom() { if (mode == 0) { return rnd; } else if (mode == 1) { return tRnd.get(); } else { return null; } } /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exception if unable to compute a result */ @Override public Long call() throws Exception { long b = System.currentTimeMillis(); for (long i = 0; i < GET_COUNT; i++) { getRondom().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>[] futs = new Future[THREAD_COUNT]; for (int i = 0; i < THREAD_COUNT; i++) { futs[i] = exe.submit(new RndTask(0)); } long totaltime = 0; for (int i = 0; i < THREAD_COUNT; i++) { totaltime += futs[i].get(); } System.out.println("多线程访问同一个Random实例:" + totaltime + "ms"); for (int i = 0; i < THREAD_COUNT; i++) { futs[i] = exe.submit(new RndTask(1)); } totaltime = 0; for (int i = 0; i < THREAD_COUNT; i++) { totaltime += futs[i].get(); } System.out.println("使用ThreadLocal包装Random实例:" + totaltime + "ms"); exe.shutdown(); } }
标签:代码 cal 处理 task end ide blog demo ble
原文地址:http://www.cnblogs.com/ten951/p/6212358.html