摘要: 记录一下线上机器的JVM参数配置: CATALINA_OPTS="$CATALINA_OPTS -server -Djava.awt.headless=true 6.7补充:之前贴的是web机器的JVM参数配置,看了service的参数配置,稍稍有点不同 web配了新生代1G,老年代1.5G,ser 阅读全文
posted @ 2017-05-31 23:30 Mr.do 阅读(1824) 评论(0) 推荐(0) 编辑
摘要: final也是并发中一个常用的tips。JMM中对final提供的重排序规则如下: 1、当在constructor中对final变量写入之前,不会将构造对象的引用给出去。 2、读一个包含final域的对象的引用 happens before 后续对这个final域的读 关于(1),是说当在const 阅读全文
posted @ 2017-04-27 09:16 Mr.do 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 哈哈 阅读全文
posted @ 2017-04-20 20:51 Mr.do 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一、锁的语义 锁机制是Java中最重要的同步机制,其能够使临界区的代码互斥执行,且执行的结果对下一个拿到锁的线程立即可见。个人感觉,大家普遍对锁的互斥性有普遍的理解,很容易忽略了锁提供的可见性的保证。试想,如果锁仅仅提供了互斥,在临界区代码执行完之后,不把相应的执行结果刷回主内存,那么下一个线程拿到 阅读全文
posted @ 2017-04-19 21:52 Mr.do 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 一、volatile关键字的语义 当用volatile关键字修饰一个变量时,这个变量就会有一点特殊: 1. 可见性:volatile能够保证其所修饰变量的可见性,即一个线程对volatile变量的写,对后续的读是立即可见的 2. 原子性:volatile是无法保证对变量复合操作的原子性的(如vola 阅读全文
posted @ 2017-04-18 08:44 Mr.do 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 一、 as-if-serial语义 上篇文章中说道,编译器,运行时的JIT编译器或处理器都会对指令进行重排序以提升程序的执行性能。但这些重排序需要满足as-if-serial语义,不能随便的进行重排序。as-if-serial语义即指:不管怎么重排序,单线程程序的执行结果不能被改变。因此,不能对存在 阅读全文
posted @ 2017-04-17 23:19 Mr.do 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 一、并发中的关键问题及其解决思路 并发中的关键问题:1. 线程之间如何通信 —— 线程之间如何交换信息2. 线程之间如何同步 —— 控制线程的相对执行顺序 两种解决思路: 1. 隐式通信,显示同步 —— 线程之间通过共享内存中的公共状态来隐式通信,那么就必须显示的指定线程见的互斥来实现同步2. 显式 阅读全文
posted @ 2017-04-17 21:28 Mr.do 阅读(887) 评论(0) 推荐(0) 编辑
摘要: 前两天,听了公司DBA老大的分享,也是首次接触到了MGR这个架构,其对MGR的大力推崇,让作为业务开发人员的我也对其产生了兴趣,至此,用同事“老司机”的话说,是时候学习一波了。 一、CAP与MySQL 谈MGR之前,先要熟悉一下CAP与MySQL的关系。当前MySQL的master-slave架构, 阅读全文
posted @ 2017-04-08 15:12 Mr.do 阅读(1293) 评论(0) 推荐(0) 编辑
摘要: 在团队的重试与延迟调度项目中,使用了基于DelayQueue的方式来实现时间调度和触发,此处,对DelayQueue进行一些梳理。 首先是Queue接口,关于队列的含义,不再赘述。如下,Queue接口方法,按抛异常或返回特定值(null)可以分为两类如下图: 接下来是BlockingQueue接口, 阅读全文
posted @ 2017-03-21 10:17 Mr.do 阅读(714) 评论(0) 推荐(0) 编辑
摘要: 延迟调度系统,核心在于基于时间的调度。上问说道,粗糙的时间调度可以使用job来执行,其时间误差可能达到分钟级。当需要进行更加精确的时间调度,就需要引入额外的手段了,此处,主要介绍两个方法:DelayQueue与环形队列。 (一)基于DelayQueue的延迟调度 关于DelayQueue的阐述,参考 阅读全文
posted @ 2017-03-20 16:50 Mr.do 阅读(395) 评论(0) 推荐(0) 编辑