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

做网站专业公司恒丰建设集团有限公司 网站

做网站专业公司,恒丰建设集团有限公司 网站,自己创造游戏的软件,没人注意的暴利行业编写并发Java应用程序时最令人讨厌的问题之一是对线程之间共享的资源的处理#xff0c;例如Web应用程序的会话和应用程序数据。 结果#xff0c;如果应用程序的并发级别很低#xff0c;许多开发人员选择根本不同步这些资源。 例如#xff0c;不太可能同时访问会话资源… 编写并发Java应用程序时最令人讨厌的问题之一是对线程之间共享的资源的处理例如Web应用程序的会话和应用程序数据。 结果如果应用程序的并发级别很低许多开发人员选择根本不同步这些资源。 例如不太可能同时访问会话资源如果请求周期在很短的时间内完成那么当第一个请求周期仍在进行时用户不太可能使用第二个浏览器选项卡发送并发请求。 随着Ajax驱动的Web应用程序的兴起这种信任方法的确变得越来越危险。 在Ajax应用程序中例如用户可以在另一个浏览器窗口中启动类似任务时请求完成一项较长时间的任务。 如果这些任务访问或写入会话数据则需要同步此类访问。 否则您将面临细微的错误甚至会遇到安全问题例如本博客文章中指出的那样 。 Java的synced关键字是引入锁的一种简单方法。 例如此示例仅在需要将新实例写入会话时才阻塞请求周期的线程。 HttpSession session request.getSession(true); if (session.getAttribute(shoppingCart) null) {synchronize(session) {if(session.getAttribute(shoppingCart) null) {cart new ShoppingCart();session.setAttribute(shoppingCart);}} } ShoppingCart cart (ShoppingCart)session.getAttribute(shoppingCart); doSomethingWith(cart); 此代码会将新的ShoppingCart实例添加到会话中。 每当找不到购物车时该代码将获取当前用户会话的监视器并将新的ShoppingCart添加到当前用户的HttpSession中。 但是此解决方案具有以下缺点 每当通过与上述相同的方法将任何值添加到会话中时任何正在访问当前会话的线程都将阻塞。 当两个线程尝试访问不同的会话值时也会发生这种情况。 这将使应用程序的限制更加严格。 Servlet API实现可能选择实现HttpSession而不是一个单例实例。 在这种情况下整个同步将失败。 但是这不是Servlet API的常见实现。 最好找到要与HttpSession实例同步的其他对象。 但是创建此类对象并在不同线程之间共享它们会带来相同的问题。 避免这种情况的一种好方法是使用既固有并发又允许使用弱键的Guava缓存 LoadingCacheString, Object monitorCache CacheBuilder.newBuilder().weakValues().build(new CacheLoaderString, Object{public Object load(String key) {return new Object();}}); 现在我们可以这样重写锁定代码 HttpSession session request.getSession(true); Object monitor ((LoadingCacheString,Object)session.getAttribute(cache)).get(shoppingCart); if (session.getAttribute(shoppingCart) null) {synchronize(monitor) {if(session.getAttribute(shoppingCart) null) {cart new ShoppingCart();session.setAttribute(shoppingCart);}} } ShoppingCart cart (ShoppingCart)session.getAttribute(shoppingCart); doSomethingWith(cart); Guava缓存是自填充的将仅返回一个Monitor Object实例该实例可用作对共享会话资源的锁定该资源由shoppingCart普遍标识。 Guava缓存由ConcurrentHashMap支持该ConcurrentHashMap通过仅在映射键的哈希值存储桶上进行同步来避免同步。 结果使应用程序成为线程安全的而不会全局阻止它。 另外您不必担心内存用完因为如果不再使用监视器和相关的缓存条目则会被垃圾回收。 如果您不使用其他缓存甚至可以考虑使用软引用来优化运行时间。 当然可以完善这种机制。 例如可以返回一个ReadWriteLock而不是返回Object实例。 同样在会话启动时实例化LoadingCache也很重要。 这可以通过例如HttpSessionListener来实现。 参考 My日常Java博客中的JCG合作伙伴 Rafael Winterhalter提供的Guava 用于并发应用程序的基于对象的微锁定 。 翻译自: https://www.javacodegeeks.com/2013/12/object-based-micro-locking-for-concurrent-applications-by-using-guava.html
http://wiki.neutronadmin.com/news/125689/

相关文章:

  • 网站制作出租网站首页分辨率
  • 比比西旅游网站建设seo快速排名关键词
  • wordpress网站模版北京高档网站建设
  • 门户网站建设意义wordpress 前台空白
  • 苏州公司网站建设找哪家广州网站建设联享科技
  • 学校校园网站建设必要性设计公司简介ppt范本
  • 网站开发文本模版建筑营销型网站
  • 外贸自建站多少钱医院网站建设存在问题
  • 东莞网站开发多少钱中山市企业网站建设
  • 只做衬衣网站襄阳网站seo诊断
  • 学做效果图网站有哪些软件有哪些网上购物管理系统设计与实现
  • 成都酒店网站建设做网站设计工资多少钱
  • 网上书城网站开发的目的与意毕业设计 建设旅游网站
  • 庆阳网站哪里做我国省级档案网站建设状况
  • 无锡网站建设选众鼎问答类咨询网站的建设
  • 活动策划网站有哪些泰安市齐鲁人才网
  • 国外 上海网站建设织梦软件展示网站
  • 网站建设过程规划appstore关键词优化
  • 网站开发有哪些技术wordpress 爬虫
  • wordpress 微网站盐田区住房和建设局网站
  • 做网站怎么防止被网警查到适合35岁女人的培训班
  • 兰州企业网站排名优化电子硬件工程师培训机构
  • 台州平台网站建设微信开发者工具官网下载电脑版
  • 丰台网站建设是什么做微博推广的网站
  • 平台建站建设河北人工智能建站系统软件
  • 网站建设 软件企业成都龙泉工程建设有限公司网站
  • 安徽省建设安全质量协会网站金溪网站建设推广
  • 如何调整网站板块位置重庆网站建设工作室
  • php网站后台地址wordpress 截取
  • 网站空间怎么回事html5经管网站模板