2018年5月


撰写于    浏览:1231 次  分类: 多线程与并发
AQS的诞生背景JAVA内置的锁(使用同步方法和同步块)一直以来备受关注,其优势是可以花最小的空间开销创建锁(因为每个JAVA对象或者类都可以作为锁使用)和最少的时间开销获得锁(单线程可以在最短时间内获得锁)。线程同步越来越多地被用在多处理器上,特别是在高并发的情况下,然而,JVM内置锁表现一般,而且不支持任何公平策略。从JAVA 5开始在java[...]

撰写于    浏览:222 次  分类: 多线程与并发
一、AQS框架介绍Java并发包里面的大多数工具框架大部分都是基于AbstractQueuedSynchronizer(简称AQS后面不再区分)框架实现的,这个框架提供了通用的机制来自动管理同步状态,线程的阻塞加锁和解锁,及公平和非公平的线程队列等等,所以这个工具框架的重要性不言而喻,关于AQS的详细介绍建议大家读Doug Lea的关于AQS的论文[...]

撰写于    浏览:990 次  分类: 多线程与并发
1、对于资源竞争较少的情况,使用同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗CPU资源;而CAS基于硬件实现,不需要进入内核,不需要切换线程,操作自旋几率较少,因此可以获得更高的性能。2、对于资源竞争严重的情况,CAS自旋的概率会比较大,从而浪费更多的CPU资源,效率低于锁。CAS在判断两次读取的值不一样的时候会放弃操作,但[...]

撰写于    浏览:223 次  分类: 多线程与并发
为什么要用CAS在多线程高并发编程的时候,最关键的问题就是保证临界区的对象的安全访问。通常是用加锁来处理,其实加锁本质上是将并发转变为串行来实现的,势必会影响吞吐量。而且线程的数量是有限的,依赖于操作系统,而且线程的创建和销毁带来的性能损耗是不可以忽略掉的。虽然现在基本都是用线程池来尽可能的降低不断创建线程带来的性能损耗。对于并发控制而言,锁是一种[...]

撰写于    浏览:252 次  分类: 多线程与并发
前言我们知道在Java多线程里面关于共享变量的操作,一定是要使用线程同步来保证线程安全的,一旦涉及线程同步,就需要加锁,一旦加锁就意味着某一个时候只能有一个线程在操作,其他的线程如果没有得到锁就会阻塞起来,此时的线程的状态是BLOCKED,当前面的线程释放锁的时候,系统会自动调度当前的线程进入临界区,这里面存在一个问题,就是线程的上下文切换的问题,[...]

撰写于    浏览:298 次  分类: 多线程与并发
关于CAS内容太多了,本系列主要是收集各方观点。