当前位置: 首页 > news >正文

新河镇网站制作如何建开发手机网站

新河镇网站制作,如何建开发手机网站,上海到北京高铁价格查询,注册域名的网站有哪些一、ThreadLocal在多线程环境中没有清理 由于ThreadLocal是和线程绑定的,如果线程被复用了,也即使用了线程池,那么ThreadLocal中的值是可能被复用的,这个特性如果是开发者没有预料到的,那么会产生很大的问题。例如&am…

一、ThreadLocal在多线程环境中没有清理

由于ThreadLocal是和线程绑定的,如果线程被复用了,也即使用了线程池,那么ThreadLocal中的值是可能被复用的,这个特性如果是开发者没有预料到的,那么会产生很大的问题。例如,在JAVA web应用中,我们通常会使用很多ThreadLocal来保存一次请求的不同上下文信息,其中就包含登录用户,如果一次请求完成后,没有清理掉当前登录用户信息,那么当另外一个用户的请求进来,就会使用上一个用户,如果是涉及到数据写入,将直接导致数据错乱,造成严重生产问题。

二、ConcurrentHashMap使用的问题

ConcurrentHashMap提供的能力是保证单个操作在多线程环境下是安全的。如果有一段逻辑是先读取size大小,在决定是否往map里put(),那么这段逻辑必然产生并发问题。因为错误理解的ConcurrentHashMap的能力。解决办法是用加锁的方式控制并发。

三、CopyOnWriteArrayList使用的问题

CopyOnWrite 是一个常用的技术,Linux、Redis中都用到了。在 Java 中,CopyOnWriteArrayList 虽然是一个线程安全的 ArrayList,但因为其实现方式是,每次修改数据时都会复制一份数据出来,所以有明显的适用场景,即读多写少或者说希望无锁读的场景。

//测试并发写的性能
@GetMapping("write")
public Map testWrite() {
List<Integer> copyOnWriteArrayList = new CopyOnWriteArrayList<>();
List<Integer> synchronizedList = Collections.synchronizedList(new ArrayList<>());
StopWatch stopWatch = new StopWatch();
int loopCount = 100000;
stopWatch.start("Write:copyOnWriteArrayList");
//循环100000次并发往CopyOnWriteArrayList写入随机元素
IntStream.rangeClosed(1, loopCount).parallel().forEach(__ -> copyOnWriteArrayList.add(ThreadLocalRandom.current().nextInt(loopCount)));
stopWatch.stop();
stopWatch.start("Write:synchronizedList");
//循环100000次并发往加锁的ArrayList写入随机元素
IntStream.rangeClosed(1, loopCount).parallel().forEach(__ -> synchronizedList.add(ThreadLocalRandom.current().nextInt(loopCount)));
stopWatch.stop();
log.info(stopWatch.prettyPrint());
Map result = new HashMap();
result.put("copyOnWriteArrayList", copyOnWriteArrayList.size());
result.put("synchronizedList", synchronizedList.size());
return result;
}//帮助方法用来填充List
private void addAll(List<Integer> list) {
list.addAll(IntStream.rangeClosed(1, 1000000).boxed().collect(Collectors.toList()));
}//测试并发读的性能
@GetMapping("read")
public Map testRead() {
//创建两个测试对象
List<Integer> copyOnWriteArrayList = new CopyOnWriteArrayList<>();
List<Integer> synchronizedList = Collections.synchronizedList(new ArrayList<>());
//填充数据
addAll(copyOnWriteArrayList);
addAll(synchronizedList);
StopWatch stopWatch = new StopWatch();
int loopCount = 1000000;
int count = copyOnWriteArrayList.size();
stopWatch.start("Read:copyOnWriteArrayList");
//循环1000000次并发从CopyOnWriteArrayList随机查询元素
IntStream.rangeClosed(1, loopCount).parallel().forEach(__ -> copyOnWriteArrayList.get(ThreadLocalRandom.current().nextInt(count)));
stopWatch.stop();
stopWatch.start("Read:synchronizedList");
//循环1000000次并发从加锁的ArrayList随机查询元素
IntStream.range(0, loopCount).parallel().forEach(__ -> synchronizedList.get(ThreadLocalRandom.current().nextInt(count)));
stopWatch.stop();
log.info(stopWatch.prettyPrint());
Map result = new HashMap();
result.put("copyOnWriteArrayList", copyOnWriteArrayList.size());
result.put("synchronizedList", synchronizedList.size());
return result;
}

http://www.yayakq.cn/news/288194/

相关文章:

  • 阿里云网站建设一次付费信息系统开发过程
  • 洛阳网站建设费用个人网站做淘宝客
  • 博望哪里做网站美肤宝网站建设
  • 惠州市做网站的公司sns社交网站开发
  • 广州网络服装网站建设网络策划人
  • 网站动画用什么程序做wap免费空间
  • 重庆网站备案系统网站建设试卷摄影
  • 自己做网站stri广告创意设计公司
  • 网站首页文案模板常熟市沿江经济开发区人才网
  • 中国建设劳动学会监制网站个人博客html代码
  • 沈阳网站排名工具古典网站素材
  • 做网站吸引客户创意广告牌设计图片大全
  • 网站运营计划书东莞企业网站制作
  • 做 网站 要专线吗珠海网站建设公司哪家好
  • 个人在线网站推广深圳品牌衣服店名称
  • 创意网站建设策划方案做电影网站怎么盈利
  • 自己建还是找代理建网站wordpress放谷歌代码
  • 网站备案名字填写图文制作app哪个好
  • 网站后台iis配置微楼书网站建设
  • 黄冈市住房和城乡建设厅网站怎么免费制作一个网站
  • 赣州专业网站推广多少钱传奇网页游戏开服
  • 好的免费博客网站c 网站开发
  • 辽宁城乡建设网站个人免费自助建站网站
  • 国内黑色风格的网站网站文章更新要求
  • 网站下拉菜单设计删除WordPress登录地址
  • 自己做网站需要多少费用北京小程序开发平台
  • 深圳建网站需要多少钱wordpress图片上传不显示
  • 学生心理健康网站建设论文wordpress引用抖音视频
  • 做网站要写代码吗哪个网站企业邮箱最好
  • 网站手机采集云南省网站备案