java并发包中提供了三个常用的并发队列实现,分别是:ConcurrentLinkedQueue、LinkedBlockingQueue和ArrayBlockingQueue。 ConcurrentLinkedQueue使用的是CAS原语无锁队列实现,是一个异步队列,入队速度很快,出队进行了加锁,性 ...
分类:
编程语言 时间:
2019-05-01 18:45:13
阅读次数:
155
背景:之前在研究多线程的时候,模模糊糊知道AQS这个东西,但是对于其内部是如何实现,以及具体应用不是很理解,还自认为多线程已经学习的很到位了,贻笑大方。 这里的源码还没有能够完整的跟下来,后面还要继续努力完善。 Java并发包基石-AQS详解 Java并发包(JUC)中提供了很多并发工具,这其中,很 ...
分类:
编程语言 时间:
2019-04-28 09:58:40
阅读次数:
173
一、线程主要有以下几种状态: new(新建):线程刚刚被创建 runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态 blocked(阻塞):当线程执行被锁的代码块或方法时,等待其他线程释放锁而处于阻塞状态 waiting(等待):线程 ...
分类:
编程语言 时间:
2019-04-24 23:31:40
阅读次数:
182
CAS(Compare-and-Swap),即比较并替换,java并发包中许多Atomic的类的底层原理都是CAS。 它的功能是判断内存中某个地址的值是否为预期值,如果是就改变成新值,整个过程具有原子性。 具体体现于sun.misc.Unsafe类中的native方法,调用这些native方法,JV ...
分类:
其他好文 时间:
2019-04-23 23:50:13
阅读次数:
310
背景:求职过程中,这个问题反复被问到。如果答不上来,只能说明基本功不扎实,并不能说自己擅长java。 技术趣味史-Java 各个版本的特性 Java 5 2004 年 Sun 公司发布 J2SE5(没错,Sun 公司又改名字了),版本代号 Tiger,这个版本的 Java 语言新功能如下: 1、泛型 ...
分类:
其他好文 时间:
2019-04-21 12:59:03
阅读次数:
772
CountDownLatch(计数器)CountDownLatch位于并发包下,利用它可以完成类似于计数器的功能,如果线程A需要等待其他n个线程执行完毕后才能执行,此时就可以利用CountDownLatch来实现这个功能,CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程数量,每当一个线程完成了自己的任务后,计数器的值就会减1,当计数器的值为0时,表示所有线程已经执行完毕,
分类:
其他好文 时间:
2019-04-17 12:27:11
阅读次数:
119
volatile本身并不保证原子性和线程安全,它只保证线程可见性。比如有两个应用场景,1在单例模式的双重检测中用 2在多个线程读里,用于判断标志位 {因为redis是单线程,所以它的原子操作incre加一操作,才能保证线程安全。而java并发包中的atomic是线程安全的} 下图例子即表明,多线程时 ...
分类:
其他好文 时间:
2019-03-27 21:28:16
阅读次数:
187
1、同步容器类 1.1、Vector与ArrayList异同 1、Arraylist和Vector都是采用数组方式存储数据,都允许直接序号索引元素,所以查找速度快,但是插入数据等操作涉及到数组元素移动等内存操作,所以插入数据慢 2、 Vector的方法都是同步的(Synchronized),是线程安 ...
分类:
编程语言 时间:
2019-03-21 23:06:15
阅读次数:
317
看了下J.U.C并发包下的ReentrantLock源码,费了不少劲,做个小总结吧,尽量用通俗易懂的语言描述,配上一些图说明。 ReentrantLock介绍 ReentrantLock是基于AbstractQueuedSynchronizer(AQS框架)设计的,类里面有一个私有sync成员属性, ...
分类:
其他好文 时间:
2019-03-09 01:21:34
阅读次数:
199