摘要: private V doPut(K key, V value, boolean onlyIfAbsent) { Node z; // added node if (key == null) throw new NullPointerException(); Comparator cmp ... 阅读全文
posted @ 2017-12-06 16:22 emoji的博客 阅读(249) 评论(0) 推荐(0) 编辑
摘要: CopyOnWriteArrayList:通过copy一份以前元素的快照,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器"。该集合适合读多写少的场景(读没有加锁,其他更新操作均有加锁)。 元素添加,上锁,线程安全的,每次只允许一个线程对该集合修改。 在指定位置上添加元素: 更新指定位置 阅读全文
posted @ 2017-12-05 10:22 emoji的博客 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 一: 单一职责原则:就一个类而言,应该只有一个引起它变化的原因。 二: 开闭原则:软件实体对扩展开放,对修改关闭。 三: 里式代换原则:子类型必须能够替换掉它们的父类型。 四: 依赖倒转原则:抽象不应该依赖细节,细节应该依赖抽象。应该面向接口编程。 阅读全文
posted @ 2017-11-09 21:46 emoji的博客 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 五: 接口分离原则:不应该强迫程序依赖它们不需要使用的方法。即,一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口中。 六: 迪米特原则:一个对象应该对其他对象尽可能少的了解。如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中 阅读全文
posted @ 2017-11-09 21:46 emoji的博客 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 看看内部类Sync: 再看看内部类ReadLock: 内部类WriteLock: 阅读全文
posted @ 2017-11-08 15:16 emoji的博客 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 先看看Sync这个类,继承自AQS:(因为默认是非公平模式,所以这里直接实现了非公平模式下的尝试获取锁) 再看看子类FairSync 公平锁的实现: 整理一下大概逻辑: 加锁操作: 非公平: 1.直接CAS抢占设置state,如果成功,获取锁成功。 2.如果获取失败,需要检查锁是否被其他线程持有 3 阅读全文
posted @ 2017-11-07 21:01 emoji的博客 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 头尾节点和状态: 独占模式尝试获取请求: 在看看: 再看看cancelAcquire: 共享模式下尝试请求,响应中断 共享模式下的释放方法: 看看内部类ConditionObject:(条件等待队列) await方法: signal方法: signalAll方法: 阅读全文
posted @ 2017-11-06 22:15 emoji的博客 阅读(173) 评论(0) 推荐(0) 编辑
摘要: Java中每个对象都能作为锁:1.对于普通同步方法,锁是当前实例对象。2.对于静态同步方法,锁是当前类的Class对象。3.对于同步方法块,锁是synchronized括号里面配置的对象。 那么,同步方法和同步代码块的实现方式是怎样的呢?1.同步代码块是使用monitorenter和monitore 阅读全文
posted @ 2017-11-05 15:35 emoji的博客 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 线程安全:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。(Java并发编程实战) 如果当多个线程访问同一个可变的状态变量时,程序出现错误。可以通过以下方式可以修复该问题。1.不在线程之间共享该状态变量。2.将状态变量修改为不可变的变量。3.在访问状态变量时使用同 阅读全文
posted @ 2017-11-05 08:23 emoji的博客 阅读(169) 评论(0) 推荐(0) 编辑
摘要: LinkedHashMap:是HashMap的子类,内部维护双向链表,元素有序,默认按照插入顺序排序,可以自定义按照访问顺序排序。 成员属性: 构造函数: 其他重要方法: 元素获取: LinkedHasMap 在SpringMVC (AbstractCachingViewResolver)中的应用: 阅读全文
posted @ 2017-11-01 21:22 emoji的博客 阅读(417) 评论(0) 推荐(0) 编辑