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
4.3.3 thread对性能有何帮助的更多相关文章
- [转]Java Thread Dump 性能分析
Java and Thread 一个 web 服务器使用几十到几百个线程来处理大量并发用户,如果一个或多个线程使用相同的资源,线程之间的竞争就不可避免了,并且有时候可能会发生死锁. Thread co ...
- python3 线程 threading.Thread GIL性能详解(2.3)
python3 线程 threading 最基础的线程的使用 import threading, time value = 0 lock = threading.Lock() def change(n ...
- Android线程管理之ExecutorService线程池
前言: 上篇学习了线程Thread的使用,今天来学习一下线程池ExecutorService. 线程管理相关文章地址: Android线程管理之Thread使用总结 Android线程管理之Execu ...
- Java程序员必备知识-多线程框架Executor详解
为什么引入Executor线程池框架 new Thread()的缺点 每次new Thread()耗费性能 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞 ...
- C#多线程编程笔记
在开发中经常有遇到因为程序执行的时间过长,而造成程序假死的情况,这是因为我们的程序是同步执行的,当执行到需要长时间的操作时,程序就会等待当前的操作完成,从而造成程序假死.C#的异步与多线程就是为了解决 ...
- 5、二、App Components(应用程序组件):0、概述
二.App Components(应用程序组件) 0.概述 App Components Android's application framework lets you create rich ...
- 【Redis】1、Jedis对管道、事务以及Watch的操作来应对高并发
对于一个互联网平台来说,高并发是经常会遇到的场景.最有代表性的比如秒杀和抢购.高并发会出现三个特点: 1.高并发读取 2.高并发写入(一致性) 3.出现超卖问题 前端如何应对? 1.缓存静态数据,例如 ...
- Java多线程框架Executor详解
原文链接 http://www.imooc.com/article/14377 为什么引入Executor线程池框架new Thread()的缺点 每次new Thread()耗费性能调用ne ...
- Executor简析
本文只做简要解析,实际情形下我们多用spring的taskExecutor 直接使用new Thread()创建线程的缺点: 1.new Thread()耗费性能 2.调用new Thread()创建 ...
随机推荐
- 阿里云经典网络下一键安装RouterOS-ROS系统
1.阿里云环境centos6.9 x64: 内网网卡为eth0 外网网卡为eth1 阿里云的linux下硬盘名称为/dev/vda 注意阿里云的安全组建议开放任意协议和端口,任意IP允许访问 今天测试 ...
- 高效网页去重算法-SimHash
记得以前有人问过我,网页去重算法有哪些,我不假思索的说出了余弦向量相似度匹配,但如果是数十亿级别的网页去重呢?这下糟糕了,因为每两个网页都需要计算一次向量内积,查重效率太低了!我当时就想:论查找效率肯 ...
- mybatis-plus 学习笔记
一.首先是POM <dependencies> <dependency> <groupId>org.springframework.boot</groupId ...
- KEGG Pathway Anonatation
转载于 Original 2017-06-20 liuhui 生信百科 KEGG 数据库中,把功能相似的蛋白质归为同一组,然后标上 KO 号.通过相似性比对,可以为未知功能的蛋白序列注释上 KO 号. ...
- Python Twisted系列教程17:造”回调”的另一种方法
作者:dave@http://krondo.com/just-another-way-to-spell-callback/ 译者: Cheng Luo 你可以从”第一部分 Twist理论基础“开始阅 ...
- thrift协议的服务进压力测试
Thrift vs Grpc内容如下链接 http://blog.csdn.net/dazheng/article/details/48830511 背景:Facebook 开发的远程服务调用框架 ...
- 2019 最新 阿里天猫、蚂蚁、钉钉ava 面试题汇总,附答案
Java面试前需要做足各方面的准备工作,肯定都会浏览大量的面试题,本人也不例外,这是一些最新面试题,分享给大家. Java基础 面向对象的特征:继承.封装和多态 int 和 Integer 有什么区别 ...
- NFS共享权限问题
//所有web集群节点的用户统一uid 例如888,用户最好也统一 Apache server: useradd -u 888 -s /sbin/nologin -M www chown -R www ...
- "网页安全政策"(Content Security Policy,缩写 CSP)的来历
作者:阿里聚安全链接:https://www.zhihu.com/question/21979782/answer/122682029来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- 设置Eclipse中的tab键为4个空格
在工具栏上找到window,点击 window->preference 然后在打开的界面中选择 General->Editors->Text Editors, 再选中右侧的 inse ...