摘要:
经常被问到hashcode方法和equals方法还有== ,网上都有结论,但我们不能知其然却不知其所以然。所以我们从string的hashcode和equals入手,探究这3者,先贴源码。 public int hashCode() { int h = hash; if (h == 0 && val 阅读全文
摘要:
对于2元状态(true或者false)可以用2进制(0/1)来存储,每一位上都对应种属性的true/false,最多可以存储31种属性的状态。 增加 删除 判断某种属性可以按上述代码的算法实现。 好处:大大节约了存储空间,和运算时间,一个2进制数就可以最多包含31种属性的状态 阅读全文
摘要:
//TODO 阅读全文
摘要:
public class TrinityLock { //为3表示允许两个线程同时获得锁 private final Sync sync = new Sync(3); private static final class Sync extends AbstractQueuedSynchronizer 阅读全文
摘要:
1.乐观锁--乐观锁是一种思想,它只解决对共享资源更新时的一致性问题,不解决读取共享资源过程中,其他线程修改了共享资源导致读取的是旧的资源的问题 一般范式为: 这种实现存在如下问题1):ABA问题 假如是链表结构,1线程操作期间,其他线程修改了A.next,1线程比较后自然以为是预期值,判断true 阅读全文
摘要:
上述代码是AbstractQueuedSynchronizer中关于如何往Node中添加尾节点的代码,使用的CAS自旋volatile变量法,解决高并发下插入尾节点不同步问题。 1.假如尾节点为空,说明节点队列为空,初始化一个头结点指向尾节点的队列; 2.继续for循环,这次进入else中,先把插入 阅读全文
摘要:
1.synchronized 下面代码,启动了2个线程,对同一个实例syntest的age变量进行自增操作 多次执行,每一次的结果都不同,而且不符合预期结果。原因和cpu时间片轮转机制,线程工作内存,主内存有关吧,准确原因还不知道。 为了获得预期结果,我想着给add方法加上synchronized修 阅读全文
摘要:
1.cpu时间片轮转机制 计算机运行时需要同时运行多个程序,但一个cpu只能同时运行一个程序,为了让用户感觉同时多个程序都在运行,需要模拟并行运算,就引入cpu时间片轮转机制。 操作系统一般是按照一定策略,定期给每个活动的进程执行其内部程序的机会,并且每次只执行一小段时间,然后操作系统利用中断强行退 阅读全文