获得徽章 8
- 豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟。人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临。宇文新州之懿范,襜帷暂驻。12点赞
- Spring事务传播机制说简单点就是两个(当然可以是多个)方法上的事务之间(非平行关系,包含与被包含的关系)如何相互起作用,有以下几种情形(假如方法A和B,A调用 B):
PROPAGATION_REQUIRED:A上有事务,B加入A的事务中,A没有事务,B就自己建一个事务。
PROPAGATION_SUPPORTS:A上有事务,B加入A的事务; A没有事务,B也就没有事务。也就是说B的事务触发条件是必须被包含在一个事务中。
PROPAGATION_MANDATORY:A上有事务,B加入A的事务;A上没有事务,B抛出异常。也就是说B必须被包含在事务中。
PROPAGATION_REQUIRES_NEW:A上有事务,B不加入而是挂起A的事务,新建一个自己的事务,执行完后再继续A的事务。
PROPAGATION_NOT_SUPPORTED:A上有事务,会挂起A的事务,以非事务的方式执行B。这样A回滚也不会影响B。
PROPAGATION_NEVER:A上有事务B抛出异常,也就是说B必须以非事务的方式执行,且不能被包含在事务中。
PROPAGATION_NESTED:A有事务,则以嵌套事务执行。如果没有事务则新建自己的事务。至于嵌套事务与加入A事务区别,可以百度下。
注意:加入A事务,新建自己的事务挂起A事务和嵌套到A事务中各种情况的区别。展开评论点赞 - 责任链将一连串的、要对同一份数据进行处理的方法抽象成继承自同一个接口,再将它们链接起来。当需要增加或者减少链中的节点(方法)只需要注销实现类即可,不需要修改原有整体代码,遵循了设计模式的开闭原则。其实很多常用设计模式并没有你想象的那么复杂,比如责任链、享元、单例等等,他只不过把你能自己都能想到的一些做法用模式的语言表达出来、设计出来,所以学习设计模式千万不要害怕。赞过121
- 无论是 sychronized 还是 lock,无论是中断还是信号量,无论是 cas 还是 volitile,本质上都是为了解决线程间的协同问题,线程间的协同有两种方式:互斥和同步。互斥是手段,同步是目标,最终达到开发者想要的结果。赞过31
- 古人云成大事者不拘小节,又云细节决定成败。乍一看这两句话挺矛盾,可仔细分析会发现他们相辅相成。拿设计一个系统来说,架构师在设计系统时不应该面面俱到的考虑各种细节,考虑太多细节会导致设计时畏手畏脚,设计出来的系统也会臃肿复杂。但当系统设计图出来时,工程师们一个模块一个模块的去实现时就必须把每个细节打磨好,这样开发出来的系统才够稳定。你看,站在架构师的视角就是成大事者不拘小节,站在工程师的视角就是细节决定成败。自上而下的设计与自下而上的实现并不矛盾,具体要看你站在什么位置,你的格局有多大。当你觉得你自己还是个工程师的时候,请记得细节决定成败;当你觉得自己可以是架构师的时候,请记得成大事者不拘小节。没有人能越过工程师成为架构师,但,如果不刻意培养,你可能会一直是工程师。展开评论点赞
- Reentrantlock + Condition 本质类似 Synchronized:
1、lock() 对应 monitorenter 表示加锁
2、unlock() 对应 monitorexit 表示释放锁
3、_Owner 对应 exclusiveOwnerThread 用来指向获得锁的线程
4、state 对应 count 用来记录持有锁的线程数(可重入,同一个线程)
5、AQS 的 FIFO 双向队列对应 _EntryList,用来存放等待锁的线程
6、Condition 的 FIFO 双向队列 对应 _WaitSet,用来保存因调用 await() 方法而进入阻塞的线程展开等人赞过18