随笔分类 - 并发编程
摘要:[toc] 自定义Lock以及ReadWriterLock 基于synchronize实现自定义版Lock 基于synchronized实现自定义版ReadWriterLock
阅读全文
摘要:[toc] 生产者消费者模型实现方案 版本1:无通信的生产消费模型 版本2:使用if导致临界变量出现问题生产消费模型 版本3:使用notify导致虚假唤醒导致死锁生产消费模型 版本4:使用wait,notifyAll生产消费模型 版本5:使用Lock,Condition生产消费模型 版本6:使用自定
阅读全文
摘要:[toc] 守护线程与join 守护线程 所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在
阅读全文
摘要:[toc] synchronized关键字需要注意的几点 脏读 对业务写方法加锁,对业务读方法不加锁,容易产生脏读。 synchronized是可重入锁 可重入锁:一个线程已经拥有某个对象的额锁,再次申请的时候仍然会得到该对象的锁 synchronized对于异常处理 ynchronized 如果出
阅读全文
摘要:[toc] 深入理解volatile Volatile的官方定义 Java语言规范第三版中对volatile的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如
阅读全文
摘要:[toc] Future设计模式 示列引入 如上图,传统的订单下单流程,首先减商品库存,然后生成订单,然后生成订单详情,再通知短信等等,全部逻辑程序都是串行执行的.假如我们的系统特别'困难',减商品库存要1秒,生成订单要1秒,生成详情也要1秒,发送短信有可能要5秒,这里还不算查询商品的库存够不够下单
阅读全文
摘要:[toc] ThreadLocal源码分析 简单分析 什么是ThreadLocal ThreadLocal顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离(也就是每个线程读写都是自己的一份独立对象,与其他线程是无关的,
阅读全文