随笔分类 -  JAVA并发编程

并发+内存
摘要:Fork/Join JAVA7中出现的Fork/Join,类似于分布式文件系统hadoop的mapreduce思想,就是将任务分割,再分割,直到分割到满足条件 为了便于理解:编程逻辑可以借用 递归的思想,层层递归,直到碰到最终调件,然后层层返回;而在Fork/Join中就是,类似把每个递归的方法,单 阅读全文
posted @ 2017-06-07 17:51 寰殇丶天使 阅读(381) 评论(0) 推荐(0)
摘要:JAVA内存模型 在多线程这一系列中,不去探究内存模型的底层 一、什么是内存模型,为什么需要它 在现代多核处理器中,每个处理器都有自己的缓存,定期的与主内存进行协调; 想要确保每个处理器在任意时刻知道其他处理器正在进行的工作,将需要很大的开销;且通常是没必要的 我们只有在需要跨线程共享数据时,才需要 阅读全文
posted @ 2017-06-06 15:30 寰殇丶天使 阅读(325) 评论(0) 推荐(0)
摘要:原子变量和非阻塞的同步机制 一、锁的劣势 1.在多线程下:锁的挂起和恢复等过程存在着很大的开销(及时现代的jvm会判断何时使用挂起,何时自旋等待) 2.volatile:轻量级别的同步机制,但是不能用于构建原子复合操作 因此:需要有一种方式,在管理线程之间的竞争时有一种粒度更细的方式,类似与vola 阅读全文
posted @ 2017-06-06 11:31 寰殇丶天使 阅读(387) 评论(0) 推荐(0)
摘要:构建自定义同步工具 一、通过轮询与休眠的方式实现简单的有界缓存 二、通过条件队列:wait notify方法 注意:实际逻辑与上面没区别;且无法通过轮询和休眠方式实现的,也无法通过条件队列实现 三、内置条件队列的使用 条件谓词:对象在哪个条件下等待 条件队列:每次唤醒时,必须重新检查条件谓词 四、显 阅读全文
posted @ 2017-06-05 18:02 寰殇丶天使 阅读(343) 评论(0) 推荐(0)
摘要:显式锁 一、Lock与ReentrantLock Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有的加锁和解锁方法都是显式的 ReentrantLock实现了Lock:并提供了和synchronized相同的内存语义;同时提供了可重入的加锁语义 1.基本语义: 2.轮询锁与定 阅读全文
posted @ 2017-06-05 15:35 寰殇丶天使 阅读(272) 评论(0) 推荐(0)
摘要:并发程序测试 一、正确性测试 如:对一个自定义缓存的测试 阅读全文
posted @ 2017-06-05 14:00 寰殇丶天使 阅读(1355) 评论(0) 推荐(0)
摘要:性能与可伸缩性 一、Amdahl定律 1.问题和资源的关系 在某些问题中,资源越多解决速度越快;而有些问题则相反: 注意:每个程序中必然有串行的部分,而合理的分析出串行和并行的部分对程序的影响极大;串行部分占比和多核执行效率之间是指数级别的关系 2.ConcurrentLinkedQueue 在多核 阅读全文
posted @ 2017-06-04 11:41 寰殇丶天使 阅读(314) 评论(0) 推荐(0)
摘要:活跃性危险 一、死锁 发生:每个人都不愿意放弃自己的锁,确想要别人的锁,这就会导致死锁 1.锁顺序死锁:如果每个线程以固定的顺序获取锁,那么至少在程序中不会出现锁顺序导致的死锁; 因为顺序固定如:所有线程:A-B-C 则无问题,如果一个A-B B-A则会发生死锁 例子1:简单死锁 例子2:转账死锁 阅读全文
posted @ 2017-05-26 18:13 寰殇丶天使 阅读(274) 评论(0) 推荐(0)
摘要:一、任务和执行策略之间的隐性耦合 Executor可以将任务的提交和任务的执行策略解耦 只有任务是同类型的且执行时间差别不大,才能发挥最大性能,否则,如将一些耗时长的任务和耗时短的任务放在一个线程池,除非线程池很大,否则会造成死锁等问题 1.线程饥饿死锁 类似于:将两个任务提交给一个单线程池,且两个 阅读全文
posted @ 2017-05-26 16:52 寰殇丶天使 阅读(521) 评论(0) 推荐(0)
摘要:一、任务的取消于关闭 1、中断Thread 1.每个线程都有一个boolean类型的中断状态。true则是中断状态中 interrupt:发出中断请求;isInterrupt:返回中断状态;interrupted:清除中断状态 2.JVM中的阻塞方法会检查线程中断状态,其响应方法为:清除中断状态,抛 阅读全文
posted @ 2017-05-26 10:15 寰殇丶天使 阅读(522) 评论(0) 推荐(0)