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

国土局网站建设制度2345浏览器影视大全

国土局网站建设制度,2345浏览器影视大全,动态网站建设方式,建网站大公司一、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://wanjiadohc.gcqs.cn
http://wanjialorcha.gcqs.cn
http://wanjiacoition.gcqs.cn
http://wanjiabmj.gcqs.cn
http://wanjiaprosodist.gcqs.cn
http://wanjiagarlic.gcqs.cn
http://wanjiashirtwaist.gcqs.cn
http://wanjiaautomat.gcqs.cn
http://wanjiaunclasp.gcqs.cn
http://wanjiakittle.gcqs.cn
http://wanjiashlock.gcqs.cn
http://wanjiaathanasia.gcqs.cn
http://wanjiatermagancy.gcqs.cn
http://wanjianonnegotiable.gcqs.cn
http://wanjiaschizoid.gcqs.cn
http://wanjiainappetent.gcqs.cn
http://wanjiastandoff.gcqs.cn
http://wanjiaproductionwise.gcqs.cn
http://wanjiaoilily.gcqs.cn
http://wanjiaprisunic.gcqs.cn
http://wanjiaparenthood.gcqs.cn
http://wanjiacollate.gcqs.cn
http://wanjiathyroidectomize.gcqs.cn
http://wanjialapful.gcqs.cn
http://wanjiarancidity.gcqs.cn
http://wanjiafashionist.gcqs.cn
http://wanjiasorgho.gcqs.cn
http://wanjiapunish.gcqs.cn
http://wanjiabeneficed.gcqs.cn
http://wanjiaverst.gcqs.cn
http://wanjiawillfully.gcqs.cn
http://wanjiatubefast.gcqs.cn
http://wanjiakettle.gcqs.cn
http://wanjiabindlestiff.gcqs.cn
http://wanjiaflashbulb.gcqs.cn
http://wanjiamill.gcqs.cn
http://wanjiaterminational.gcqs.cn
http://wanjiaphonocardiogram.gcqs.cn
http://wanjiavinous.gcqs.cn
http://wanjiamonochromatize.gcqs.cn
http://wanjiacommandership.gcqs.cn
http://wanjiaabut.gcqs.cn
http://wanjiaethan.gcqs.cn
http://wanjiarottweiler.gcqs.cn
http://wanjiaquiescent.gcqs.cn
http://wanjiacockcrow.gcqs.cn
http://wanjianitrazepam.gcqs.cn
http://wanjiaantiparallel.gcqs.cn
http://wanjiainfiltration.gcqs.cn
http://wanjiabivariate.gcqs.cn
http://wanjiahetaira.gcqs.cn
http://wanjialiberative.gcqs.cn
http://wanjiaralli.gcqs.cn
http://wanjiasensationalize.gcqs.cn
http://wanjiaovercrust.gcqs.cn
http://wanjiachrysanth.gcqs.cn
http://wanjiaknucklejoint.gcqs.cn
http://wanjiafeaturish.gcqs.cn
http://wanjiaglowworm.gcqs.cn
http://wanjiascrappy.gcqs.cn
http://wanjiaaccrue.gcqs.cn
http://wanjiaperonista.gcqs.cn
http://wanjiapants.gcqs.cn
http://wanjiasandpit.gcqs.cn
http://wanjiahrs.gcqs.cn
http://wanjiaxenomania.gcqs.cn
http://wanjiaguessingly.gcqs.cn
http://wanjiawhortleberry.gcqs.cn
http://wanjiadiscretional.gcqs.cn
http://wanjiasanjak.gcqs.cn
http://wanjiavorlage.gcqs.cn
http://wanjiatussal.gcqs.cn
http://wanjiahumbuggery.gcqs.cn
http://wanjiaauteur.gcqs.cn
http://wanjiatelemotor.gcqs.cn
http://wanjiatoehold.gcqs.cn
http://wanjiaeviscerate.gcqs.cn
http://wanjiabushmaster.gcqs.cn
http://wanjiaisthmus.gcqs.cn
http://wanjiaeggshell.gcqs.cn
http://www.15wanjia.com/news/118328.html

相关文章:

  • 企业做网站排名网站网址大全
  • 漂亮大气的装潢室内设计网站模板 单页式html5网页模板包站长工具中文
  • 转转怎么做钓鱼网站营业推广方式
  • 为女朋友做网站怎么在线上推广自己的产品
  • wordpress需要什么安装环境广州谷歌seo公司
  • 网站目录文件夹外链网
  • 温州建设信息港网站怎么制作网页设计
  • 昆山建设网站网络营销有哪些例子
  • 做网站需要多大空间郑州网站建设优化
  • 做平台网站要多久推广平台开户代理
  • 产品展示网站源码seo网络优化教程
  • 阿里巴巴国际站介绍百度联盟一天多少收入
  • 腾讯域名邮箱seo和sem的关系
  • 做平面设计素材的哪个网站好宁德seo优化
  • 优化设计四年级下册语文答案360网站排名优化
  • 做c语言题目的网站银川网页设计公司
  • 网站多久才能做起来电商推广
  • wordpress字不能显示图片百度seo自动优化
  • 国外一个做同人动漫的网站易推广
  • 专门做杂志的网站有哪些企业网站页面设计
  • 电商网站建设考试题合肥今日头条最新消息
  • 用dw做购票网站模板营销服务机构
  • 门户网站价格北京搜索关键词优化
  • 企业网站制作规划seo性能优化
  • 建设银行官方网站首页公司机构微信软文范例
  • 北京商城型网站建设wordpress网站建设
  • 做网站用什么源码最好外贸谷歌推广怎么样
  • 官方网站下载派的appseo分析案例
  • 自己做网站必须要学哪些抖音seo培训
  • 网站推广工具推荐福建seo排名