并发
徐乙
这个作者很懒,什么都没留下…
展开
-
ABA问题
使用cas的时候会出现aba问题什么是abaa先被修改成b,又被修改成a,这个时候原子操作判断值没变,所以又执行了修改问题在于,检测值变了没有,为什么不是在b的时候检测的而是在a的时候检测的呢高并发的情形下,完全有可能值从a到b又到a,值没变,我们的原子操作又有什么影响呢我们在第一个a的时候期望一个业务逻辑,采用一个原子操作。a到b到a中掺杂了另外的业务逻辑,这个时候已经不是我们当时期望的那个业务...原创 2018-04-07 22:32:19 · 868 阅读 · 0 评论 -
两个线程同步时的优化的思想
线程同步的时候,锁的消耗其实还是很大的所以第一种思维,来自ConcurrentHashMap分段锁,把一张表,也就是index作为hash code的数组,分成多份,这样我们再同步的时候,只需要锁住一份就可以了,而我们之前的搜索到这一份,当然是支持并发的。所以大概就是这个思想,拆分将要锁的对象。第二种思维,读写分离来自CopyOnWriteArrayList,他是一旦对ArrayList操作,会赋...原创 2018-04-17 15:43:27 · 274 阅读 · 0 评论 -
重入锁、独占/共享锁、公平/非公平锁
重入锁一个线程对同一个对象多次加锁(我认为很有可能会发生锁合并)举个例子: static class Test { public static synchronized void say() { dosomething(); } public static synchronized void dosomething(...原创 2018-05-28 16:55:17 · 397 阅读 · 0 评论 -
线程的状态
学习自https://www.cnblogs.com/jijijiefang/articles/7222955.html新建new Thread就绪thread.start()运行using cpu,就算时间片在切换,他在不使用当前时间片的时候,依然被定义成运行状态阻塞比如释放资源,比如object.wait。需要重新转化为就绪状态才有机会转化成运行状态死亡阻塞的几种情况1.this.wait,该...原创 2018-05-29 14:35:36 · 131 阅读 · 0 评论 -
线程池
学习原因线程池是面试的高频点,在先后两次面试中这一点被问倒,这才下定决心一次性搞定线程池,弄透整个线程池的源码,绝对可以在面试中加分学习路线上层的一些被忽视的细节底层的所有源代码最长的构造方法public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...原创 2018-05-30 00:59:55 · 200 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、 Semaphore、ReentrantLock和AQS
学习自http://www.importnew.com/21889.htmlhttps://blog.csdn.net/yanyan19880509/article/details/52349056https://www.cnblogs.com/waterystone/p/4920797.html123public void await() throws InterruptedException ...原创 2018-07-15 00:26:47 · 470 阅读 · 0 评论