关闭

JUC源码分析19-队列-PriorityBlockingQueue

PriorityBlockingQueue是一个基于数组实现的线程安全的无界队列,原理和内部结构跟PriorityQueue基本一样,只是多了个线程安全。javadoc里面提到一句,1:理论上是无界的,所以添加元素可能导致outofmemoryerror;2.不容许添加null;3.添加的元素使用构造时候传入Comparator排序,要不然就使用元素的自然排序。 PriorityBlocking...
阅读(1410) 评论(0)

JUC源码分析18-队列-LinkedBlockingQueue

LinkedBlockingQueue是基于单向链表实现的有界阻塞队列,队列元素遵循FIFO,LinkedBlockingQueue比基于数组的阻塞队列拥有更好的吞吐量,但是在大部分并发应用中,性能不如基于数组的队列。 和ArrayBlocingQueue一样继承AbstractQueue,实现BlockingQueue接口,不再看BlockingQueue接口代码,直接看LinkedBlock...
阅读(236) 评论(0)

JUC源码分析17-队列-ArrayBlockingQueue

看ArrayBlockingQueue的javadoc说明,简单翻译过来: 1.基于数组实现的有界阻塞队列,队列采用FIFO; 2.因为基于数组,所以队列创建后大小不能改变。线程在插入元素到一个满的队列时会阻塞,线程获取元素时,队列为空也会阻塞; 3.对于队列的生产和消费线程提供了公平非公平策略。 ArrayBlockingQueue继承AbstractQueue抽象类,实现了Blocki...
阅读(204) 评论(0)

JUC源码分析16-集合-ConcurrentSkipListMap、ConcurrentSkipListSet

NBA这赛季结束,勇士可惜啊,谁能想到没拿到冠军,库昊也没成为真正的老大,lbl一战封神,所有口水留言都变成羡慕嫉妒恨,哎,我库啊,还是还是看书吧。 ConcurrentSkipListMap说实话,之前还真没注意过,还是看JUC才看到,利用skiplist跳表结构来实现一种有序的map,之前看到的map都是无序。在学习前还是要好好了解下什么是skiplist跳表,的确很不错,利用空间换时间,复...
阅读(1467) 评论(0)

linux 命令

一些常用命令老是忘记,百度记录下,随时添加,谢谢原创 ----------------------------------------------------- 假如,你想在当前目录下的所有普通文件中搜索查找包含:liehuo.net 这个词的文件,那么命令如下:    1.# find . -name \* -type f -print | xargs grep “liehuo.n...
阅读(218) 评论(0)

MySQL索引背后的数据结构及算法原理

看到一篇好文章,还不错,转载学习下:http://blog.jobbole.com/24006/。 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为...
阅读(399) 评论(0)

java类加载说明

明天端午,下午回家,我的JUC也一时半会看不完,就随手看看阿里中间件博客http://jm.taobao.org上的文章,看到spi的东西,就想想好像java类加载进制不是特别清楚,虽说知道有3层,什么双亲委托,但是还是有点模糊,哎,赶紧学习吧,这里写下来,省的以后忘记。 千言万语不如一行代码,先看代码: public class Hello { public static ...
阅读(229) 评论(0)

JUC源码分析15-集合-ConcurrentHashMap

好几天没看juc了,之前看了HashMap,还有个差不多的HashTable,二者的结构大致相同,小小的比较下2者的不同: 1.HashMap是非线程安全的,HashTable通过synchronized加锁实现线程安全。如果我们的代码里存在{get();...;put()}这种操作的话就保证不了; 2.HashMap可以存储key或value为null的值,HashTable不行; 3.初...
阅读(1324) 评论(0)

java关键字-final语义

转载:http://www.infoq.com/cn/articles/java-memory-model-6/ 对java关键字final的解析,以前都没关注过final竟然这些东西。 与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被...
阅读(691) 评论(0)

JUC源码分析14-集合-HashMap

在学习juc并发集合前先看了下HashMap,听说好多面试会问这个,没遇见过,学习下吧。学习的jdk源码一直都是1.7版本的,其他版本可能有些微不同,应该也不影响学习。 HashMap有几点需要记得吧: 1.是非线程安全的:javadoc说明:可以通过Map m = Collections.synchronizedMap(new HashMap(...));解决,或者干脆用juc里面Concu...
阅读(3587) 评论(0)

JUC源码分析13-locks-ReentrantReadWriteLock

ReentrantReadWriteLock基于AQS实现读写锁的同步: 1.利用共享模式实现读锁,独占模式实现写锁; 2.支持公平和非公平,非公平的情况下可能会出现读锁阻塞写锁的场景; 3.写锁阻塞写锁和读锁,读锁阻塞写锁; 4.写锁可以降级为读锁,读锁不能升级为写锁,只能先release再lock; 5.写锁支持condition条件; 6.读写锁都支持超时/中断lock; ...
阅读(2598) 评论(0)

JUC源码分析12-locks-CyclicBarrier

CyclicBarrier字面意思是可循环栅栏,看javadoc的帮助A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. CyclicBarriers are useful in programs involving a fi...
阅读(232) 评论(0)

JUC源码分析11-locks-Semaphore

Semaphore不明白为什么直接放在juc包下,不是应该放locks下面嘛,这里还是当初locks学习吧。 Semaphore英文是信号量的意思,在这里我喜欢叫资源或者许可,实现的功能就是获取资源,获取到就干活,获取不到就排队,等别人释放了资源,然后所有排队的再去获取。实现AQS的共享api,看个入门demo: public class SemaphoreTest { //3个...
阅读(279) 评论(0)

JUC源码分析10-locks-CountDownLatch

上一次学习了ReetrantLock,是对AQS独占模式的,这次学习CountDownLatch,是共享模式api的实现。人生不死,学无止境。先看个demo吧: import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { private static CountDownLatch ...
阅读(558) 评论(0)

JUC源码分析9-locks-ReentrantLock

ReentrantLock可重入锁,使用比synchronized方便灵活,可作为替代使用: 1.支持公平/不公平锁; 2.支持响应超时,响应中断; 3.支持condition; ReentrantLock实现了Lock接口,内部使用static类继承AQS实现独占式的api来实现这些功能,使用AQS的state来表示锁可重入次数: 之前学习AQS的时候说过请求和rele...
阅读(718) 评论(0)

JUC源码分析8-locks-AQS-condition

AQS的conditionObject实现类似object的wait/notify/notify的功能,功能大概是: 1.object维护一个监视器和一个等待队列,condition对于一个lock可以有多个condition,对于每个condition维护一个条件队列; 2.提供wait/signal/signalall功能。 来个入门demo: public class Conditi...
阅读(834) 评论(1)

JUC源码分析7-locks-AQS-共享模式

AQS中一定要记住2点: 1.处理流程: if(!请求成功) 加入队列 2.请求是对state的判断,AQS不关心你state表示什么,你可以表示状态也可以表示数量,由子类实现对请求的判断。将规则的判断和规则的处理分离,有点像模板模式。 先想想什么是独占什么是共享,举个栗子:独占就像大家拿号去排队体检,你拿号了发现前面还有n个人,没办法,等吧,然后你前面的人体检完了,医生就说,你通知下一...
阅读(1079) 评论(1)

JUC源码分析6-locks-AQS-独占模式

AbstractQueuedSynchronizer(下面简称AQS),javadoc说明: Provides a framework for implementing blocking locks and related synchronizers (semaphores, events, etc) that rely on  first-in-first-out (FIFO) wait que...
阅读(822) 评论(0)

JUC源码分析5-locks-LockSupport

LockSupport通过unsafe提供阻塞和唤醒线程的方法,AQS和其他的lock都会使用到这个基础类。 private LockSupport() {} // Cannot be instantiated. private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long parkBl...
阅读(339) 评论(0)

JUC源码分析4-原子变量-AtomicStampedReference/AtomicMarkableReference

之前讲过的AtomicInteger等CAS操作会产生ABA问题,什么是ABA?wiki官方解释https://en.wikipedia.org/wiki/ABA_problem,简单讲就是多线程环境,2次读写中一个线程修改A->B,然后又B->A,另一个线程看到的值未改变,又继续修改成自己的期望值。如果我们不关心中间状态的变化,只关心最终结果,就无所谓ABA问题。看代码: import jav...
阅读(422) 评论(0)
139条 共7页首页 上一页 1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:73418次
    • 积分:1471
    • 等级:
    • 排名:千里之外
    • 原创:62篇
    • 转载:76篇
    • 译文:1篇
    • 评论:16条
    最新评论