随笔分类 -  多线程

摘要:语义: 1.公平锁:每个线程在获取锁的时候,会先检查该锁维护的等待队列,如果该队列是空或者当前线程是第一个,则占有锁,否则按照FIFO的原则,进入等待队列,等待获取锁; 2.非公平锁:当前线程在获取锁的时候,不管该锁的维护队列种是否有其它等待线程,直接CAS,如果cas失败,则再执行公平锁的那一套; 阅读全文
posted @ 2017-11-26 15:55 it馅儿包子 阅读(176) 评论(0) 推荐(0)
摘要:趁周末,把以前的书拿出来,再翻一番,顺便做个笔记: 内存屏障:用来控制和规范cpu对内存操作的顺序的cpu指令。 内存屏障列表: 1.loadload:确保“前者数据装载”先于“后者装载指令”; 2.storestore:确保“前者数据”先于“后者数据”刷入系统内存,且,“前者刷入系统内存的数据”对 阅读全文
posted @ 2017-11-26 15:09 it馅儿包子 阅读(1701) 评论(1) 推荐(2)
摘要:关于等待状态的线程调用interrupt方法报异常:InterruptedException 当线程被阻塞,比如wait,join,sleep等,在调用interrupt方法,没有占用cpu运行的线程是不可能给自己的中断状态置位的,这就产生了InterruptedException异常. 一.闭锁C 阅读全文
posted @ 2017-08-09 22:27 it馅儿包子 阅读(709) 评论(0) 推荐(0)
摘要:1.保持可运行线程数量尽可能的少的主要技术是,让每个线程做少量的工作,然后使用Object.wait等待某个条件发生,或者使用Thread.sleep()睡眠一段时间,线程不应该忙-等busy-wait,即反复的检查一个数据结构,以等待某些事件发生。除了使程序易受调度器的变化的影响外,忙等这种做法还 阅读全文
posted @ 2017-07-13 00:10 it馅儿包子 阅读(185) 评论(0) 推荐(0)
摘要:在《java并发编程的艺术》这本书中,关于volatile的内存原理本质的描述如下: 有volatile变量修饰共享变量在编译器编译后,后多出一个“lock” 来(lock前缀指令相当于一个内存屏障,会强制将对缓存的修改操作写入主内存),该字符在多核处理器下回引发两个事件: 1.将当前处理器缓存行的 阅读全文
posted @ 2017-07-04 21:53 it馅儿包子 阅读(2699) 评论(5) 推荐(0)
摘要:this逃逸, 是指在构造函数返回之前,其它线程就持有该对象的引用,调用尚未构造完全的对象的方法,可能引发令人疑惑的错误,应该避免this逃逸事件的发生。 this逃逸经常发生在构造函数中启动线程或注册监听器时, 如: 在构造函数中创建Thread对象是没有问题的,但是不要启动Thread,可以提供 阅读全文
posted @ 2017-06-26 23:15 it馅儿包子 阅读(977) 评论(0) 推荐(0)
摘要:单词解释: 乱序执行:指CPU对代码的执行顺序进行乱序优化,但保证各执行代码单元的顺序按指令顺序排列。以达到充分利用处理器的各处理单元的目的。(可以理解成:一个任务有不同的执行单元,这些单元之间有一定的执行顺序,但部分执行单元可提前工作,乱序执行就是让这部分执行单元提前一段时间执行,从而提高整体的效 阅读全文
posted @ 2017-06-26 23:03 it馅儿包子 阅读(625) 评论(0) 推荐(0)
摘要:volatile工作中没用到过,买了本《java并发编程的艺术》,准备系统的学习下多线程. volatile是轻量级的synchronized,它能够在多处理器开发中保证了共享变量的“可见性”. 可见性:当一个线程修改了一个共享变量时,另一个线程能够读到这个被修改该后的值. 当一个被volatile 阅读全文
posted @ 2017-01-15 23:17 it馅儿包子 阅读(811) 评论(0) 推荐(0)