专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

做多线程并发扩展,这两点你需要关注

  摘要:Spring作为一个IOCDI容器,帮助我们管理了许许多多的bean。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。
  本文分享自华为云社区《【高并发】多线程并发扩展云社区华为云》,作者:冰河。死锁死锁必要条件
  1)互斥条件
  进程对所分配到的资源进行排他性的使用,即在一段时间内某个资源只由一个进程占用,如果此时还有其他进程请求资源,那么请求者只能等待,直到占用资源的进程将资源释放。
  2)请求和保持条件
  进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有。此时,请求进程阻塞,但又对自己已获得的其他资源保持不放。
  3)不剥夺条件
  进程已获得资源,在未使用完之前,不能被剥夺,只能在使用完后,自己释放相应的资源。
  4)环路等待条件
  存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。
  死锁示例代码如下:packageio。binghe。concurrency。example。deadlock;importlombok。extern。slf4j。Slf4j;authorbingheversion1。0。0description一个简单的死锁类当DeadLock类的对象flag1时(td1),先锁定o1,睡眠500毫秒而td1在睡眠的时候另一个flag0的对象(td2)线程启动,先锁定o2,睡眠500毫秒td1睡眠结束后需要锁定o2才能继续执行,而此时o2已被td2锁定;td2睡眠结束后需要锁定o1才能继续执行,而此时o1已被td1锁定;td1、td2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。Slf4jpublicclassDeadLockimplementsRunnable{publicintflag1;静态对象是类的所有对象共享的privatestaticObjecto1newObject(),o2newObject();Overridepublicvoidrun(){log。info(flag:{},flag);if(flag1){synchronized(o1){try{Thread。sleep(500);}catch(Exceptione){e。printStackTrace();}synchronized(o2){log。info(1);}}}if(flag0){synchronized(o2){try{Thread。sleep(500);}catch(Exceptione){e。printStackTrace();}synchronized(o1){log。info(0);}}}}publicstaticvoidmain(String〔〕args){DeadLocktd1newDeadLock();DeadLocktd2newDeadLock();td1。flag1;td2。flag0;td1,td2都处于可执行状态,但JVM线程调度先执行哪个线程是不确定的。td2的run()可能在td1的run()之前运行newThread(td1)。start();newThread(td2)。start();}}
  注意:代码为转载示例处理死锁的方法预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来防止死锁的发生。避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。检测死锁:允许系统在运行过程中发生死锁,但可设置检测机构及时检测死锁的发生,并采取适当措施加以清除。解除死锁:当检测出死锁后,便采取适当措施将进程从死锁状态中解脱出来。多线程并发最佳实践
  (1)使用本地变量
  尽量使用本地变量,而不是创建一个类或实例的变量
  (2)使用不可变类
  比如:String、基础类型的包装类等,一旦创建就不会改变,不可变类可以降低代码中需要的同步数量。
  (3)最小化锁的作用域范围:S1(1aan)
  a:并行计算部分所占的比例
  n:并行处理的节点个数
  S:加速比
  当a1时,没有串行,只有并行,此时,Sn
  当a0时,只有串行,没有并行,此时,S1
  当n趋向于无穷大时,S趋向于1(1a),这也是加速比S的上限
  S1(1aan)公式也叫做:阿姆达尔定律或者安达尔定理。
  (4)使用线程池的Executor,而不是直接newThread执行
  (5)宁可使用同步也不要使用线程的wait和notify
  (6)使用BlockingQueue实现生产消费模式
  (7)使用并发集合而不是加了锁的同步集合
  (8)使用Semaphore创建有界的访问
  (9)宁可使用同步代码块,也不使用同步的方法
  (10)避免使用静态变量Spring与线程安全性
  (1)弹簧豆:范围有两个取值:单例、prototype
  (2)交由Spring管理大多数是无状态对象,这种不会因为多线程而导致状态被破坏的对象很适合Spring的默认scopesingleton,每个单例的无状态对象都是线程安全的。其实只要是无状态的对象,不管是单例还是多例,都是线程安全的。实际上,Spring没有保证bean的线程安全
  Spring作为一个IOCDI容器,帮助我们管理了许许多多的bean。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。
  Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例如,一个scope为singleton的bean,在第一次被注入时,会创建为一个单例对象,该对象会一直被复用到应用结束。
  singleton:默认的scope,每个scope为singleton的bean都会被定义为一个单例对象,该对象的生命周期是与SpringIOC容器一致的(但在第一次被注入时才会创建)。在整个SpringIoC容器里,只有一个bean实例,所有线程共享该实例。
  prototype:bean被定义为在每次注入时都会创建一个新的对象。每次请求都会创建并返回一个新的实例,所有线程都有单独的实例使用,这种方式是比较安全的,但会消耗大量内存和计算资源。
  request(请求范围实例):bean被定义为在每个HTTP请求中创建一个单例对象,也就是说在单个请求中都会复用这一个单例对象。每当接受到一个HTTP请求时,就分配一个唯一实例,这个实例在整个请求周期都是唯一的。
  session(会话范围实例):bean被定义为在一个session的生命周期内创建一个单例对象。在每个用户会话周期内,分配一个实例,这个实例在整个会话周期都是唯一的,所有同一会话范围的请求都会共享该实例。
  application:bean被定义为在ServletContext的生命周期中复用一个单例对象。
  websocket:bean被定义为在websocket的生命周期中复用一个单例对象。
  globalsession(全局会话范围实例):这与会话范围实例大部分情况是一样的,只是在使用到portlet时,由于每个portlet都有自己的会话,如果一个页面中有多个portlet而需要共享一个bean时,才会用到。
  我们交由Spring管理的大多数对象其实都是一些无状态的对象,这种不会因为多线程而导致状态被破坏的对象很适合Spring的默认scope,每个单例的无状态对象都是线程安全的(也可以说只要是无状态的对象,不管单例多例都是线程安全的,不过单例毕竟节省了不断创建对象与GC的开销)。
  无状态的对象即是自身没有状态的对象,自然也就不会因为多个线程的交替调度而破坏自身状态导致线程安全问题。无状态对象包括我们经常使用的DO、DTO、VO这些只作为数据的实体模型的贫血对象,还有Service、DAO和Controller,这些对象并没有自己的状态,它们只是用来执行某些操作的。例如,每个DAO提供的函数都只是对数据库的CRUD,而且每个数据库Connection都作为函数的局部变量(局部变量是在用户栈中的,而且用户栈本身就是线程私有的内存区域,所以不存在线程安全问题),用完即关(或交还给连接池)。
  有人可能会认为,我使用request作用域不就可以避免每个请求之间的安全问题了吗?这是完全错误的,因为Controller默认是单例的,一个HTTP请求是会被多个线程执行的,这就又回到了线程的安全问题。当然,你也可以把Controller的scope改成prototype,实际上Struts2就是这么做的,但有一点要注意,SpringMVC对请求的拦截粒度是基于每个方法的,而Struts2是基于每个类的,所以把Controller设为多例将会频繁的创建与回收对象,严重影响到了性能。
  线程安全问题都是由全局变量及静态变量引起的
  若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
  线程安全的几种情况:
  1)常量始终是线程安全的,因为只存在读操作。
  2)每次调用方法前都新建一个实例是线程安全的,因为不会访问共享的资源。
  3)局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量和方法内变量。
  总之,Spring根本就没有对bean的多线程安全问题做出任何保证与措施。对于每个bean的线程安全问题,根本原因是每个bean自身的设计没有在bean中声明任何有状态的实例变量或类变量,如果必须如此,那么就使用ThreadLocal把变量变为线程私有的,如果bean的实例变量或类变量需要在多个线程之间共享,那么就只能使用synchized、lock、CAS等这些实现线程同步的方法了。
  点击下方,第一时间了解华为云新鲜技术
  华为云博客大数据博客AI博客云计算博客开发者中心华为云

三星,是谁给了你区别对待中国消费者的勇气?昨日,三星旗下旗舰手机Galaxys23系列国行版本发布,吸引了很多人前去关注,与此同时,微博上一则三星区别对待中国用户的话题也在逐渐升温。据了解,是因为三星昨日发布的国行版本的s中国天眼已发现740余颗新脉冲星2月15日消息,据人民日报报道,中国科学院国家天文台介绍道,截至目前,被誉为中国天眼FAST的500米口径球面射电望远镜已发现740余颗新脉冲星。(图源人民日报官方微博)中国天眼运中国没有ChatGPT,会产生文明级别的系统性落后?好怕怕啊最近一段时间,网络上到处都在讨论ChatGPT。不出意外,这一新出现的产品又一次导致讨论朝另一个方向跑了。最典型的几个就是中国为什么没有出现这种现象级的爆款。中国的互联网企业都在干看好中国市场复苏机遇,外资跑步入场看好中国经济全面复苏,全球投资者正在押注中国企业。据金融数据公司路孚特理柏(RefinitivLipper)的数据,追踪中国股票的美国共同基金和交易所买卖基金(ETF)连续五周实现中国更大力度巩固拓展脱贫攻坚成果2023年2月12日,村民在山西省夏县南大里乡蔬菜智慧产业园对秧苗进行管理。新华社发(姜桦摄)新华社北京2月14日电题中国更大力度巩固拓展脱贫攻坚成果新华社记者搭载北斗导航系统的植什么是间谍气球?美国是否曾经通过高空气球来监视中国什么是间谍飞艇和气球?通过飞艇或气球监视就是带有传感器照相机或通信设备的飞艇和气球,用于监视和收集情报。对于气球来说既可以漂浮在高空,也可以被拴在地面上,使间谍气球能够捕捉到周围地在学生心中播下珍惜敬畏生命的种子斯涵涵据2月14日中国青年报报道,据不完全统计,近年来,约有20余所大学开设了生死教育相关课程。这些课程直击大学生现实生活中的困惑挫折和问题,陪伴学生一起去探索对生命的思考敬畏珍视田园阅读文化节来啦!这周末安排上!田园阅读文化节诗意田园阅见生活阅读和露营相似都能使人们打开现实的大门出发体验和感知更广阔的世界或者说阅读是一场精神和心灵的露营放松丰富的书籍由记忆或想象构筑而成涵盖了建立在不同尺度枣庄市136个重点项目同时迎春破土2月14日,全市高质量发展重大项目建设现场推进会举行,全市136个项目集中开工,总投资1386亿元,既涵盖新兴产业先进制造业,也包括社会民生重大基础设施等项目,其中,纳入全省集中开看完这些博主的搭配,才知道春天她们这么打扮,时髦又实用很多女性一到春天,都希望自身可以呈现出更加亮眼时髦的形象,这就需要对于服装搭配有更深入的理解。如果觉得感到困惑的话,不妨去借鉴下面介绍的这几种穿搭,都是时尚博主经常会运用到的,同样香港游记(附自由行攻略)到达香港皇后码头已经认暮降临,远远的就看见皇后码头灯火辉煌。下船后就办理入关手续。入关以后直接乘地铁到了太古。我朋友住在这里,未来这几天,我都住在他家。在香港的第一餐在地铁站附近,
乐高大乱斗随时玩随时停,简单乐趣无穷欢迎关注,获取更多游戏评测资讯,入手与否不再犹豫喜欢的不妨点个赞唷()游戏倦怠期,好玩最重要我们都知道工作也好学习也好,一旦变成长期性持久性日常性的行为之后,那么就几乎不可避免地会慧拓如何在矿区创造一个平行世界?嘉和硬科技捕手记嘉和硬科技捕手记是国科嘉和2020年推出的一档新栏目,内容主要关于硬科技创业与投资的底层思维方式行业观察和经验的梳理。我们不仅会在这里分享代表性创投案例行研心得,还将结合硬科技项目产地方面少数煤矿出现库存累积,北港市场煤价有上扬态势今日,产地方面,受疫情影响,内蒙古部分区域实行静态管理,部分路段进行交通管制,煤炭公路外运受到一定程度影响,在保供大前提下,市场煤部分外运空间受到压缩。目前产地方面生产正常,煤矿仍第十七届振兴杯全国青年职业技能大赛(职工组)海南省选拔赛报名启动新海南客户端南海网南国都市报10月9日消息(记者钟圆圆)海南自贸港建设如火如荼,各行各业青年都在奋力拼搏苦练技能,在自己的岗位发光发热大展身手。现在,是时候点亮你的技能树了,这里有农商银行职工的隐形福利有哪些?能进入农商银行工作的小伙伴们,待遇其实还是不错的,只要经营不是太差的农商行,职工到手工资最低有10万左右,比普通公务员工资还是稍高点。那么除了到手看的见的工资,农商银行职工还有哪些奋进新征程建功新时代喜迎二十大埋头苦干构建水利发展新格局甘肃省水利系统干部职工以实际行动迎接党的二十大胜利召开奋进新征程建功新时代喜迎二十大埋头苦干构建水利发展新格局我省水利系统干部职工以实际行动迎接党的二十大胜利召开新甘肃甘肃日报记者王煜宇全省水网布局正在加快构建,各地水利工程有序实施,拒绝人流!下半年就去这9个地方1北疆但作为自然风光爱好者的我,北疆风景更令我心醉这里以以高山草原河谷景观为主,代表景点如禾木喀纳斯赛里木湖魔鬼城以及那拉提和巴音布鲁克等,都是我首推的好去处2山东威海已经去海边上农行陕西省分行服务地方经济高质量发展十年印记阳光讯(通讯员张铁军高海霞记者成英)三秦大地,一片古老而又神奇的土地。滔滔黄河蜿蜒奔腾,巍巍秦岭脉通九州。在中华文明源远流长的历史进程中,陕西扮演着极其重要的角色在中国革命史上,陕自助餐可以有多便宜?这个地方,6元前段时间,广西人才懂的六元自助餐一词条登上了微博热搜。许多广西人看了词条下的视频先是一愣,接着便在手机屏幕前露出会心一笑。食客们正围坐在长桌前大快朵颐。刘俊聪摄视频拍摄于广西的一家探索文旅融合丰富文化业态,山西运城古城融出新风采山西省运城市解州关帝庙景区是山西省第八次旅游发展大会的主会场,苍翠中条山衬托下,一座两层红色建筑格外惹眼,这是9月刚建成的关公数字博物馆。全息投影VR(虚拟现实)等科技手段的运用,粮油帝国背后的金龙鱼头条创作挑战赛连载(1)我讲述的是金龙鱼品牌及其母公司丰益国际商业传奇故事,牵扯到了国内鲁花胡姬花等粮油龙头包含不为人知的一面说起郭鹤年大家可能不知道他是谁,但北京国贸就是他家的产
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网