并发
溜达的地鼠
这个作者很懒,什么都没留下…
展开
-
Java并发编程--synchronized用法
线程安全单线程不会存在线程安全问题,只有多线程才会有这个问题,什么是线程安全问题呢?就是线程的执行结果和我们的预期结果不一致比如当我们设计一个售票系统,假设只有一张票了,这个时候两个用户同时买票,A用户查询发现有一张票,B用户查询也发现有一张票,这个时候两个人同时下单,系统会将票同时分给AB两个人,而实际上此时只能有一个人获取到票。这个就是线程安全问题,即多个线程同时访问一个资源时,会导致程序运行结原创 2017-07-10 20:17:59 · 323 阅读 · 0 评论 -
Java并发编程--Lock的用法
概要上一节提到了线程同步互斥的方法采用的是synchronized加锁的方法,但这种方式有个缺点就是其它线程会一直被阻塞,直到拿到锁后才能继续执行另一个缺点就是当线程执行异常后会自动释放到加锁对象试想这样一种场景,当前线程获取了一个临界锁,而这个时候线程要去处理很长的一个操作,比如IO读取文件,或者批量操作数据库,这个时候其它线程就会一直处理等待阻塞的状态,什么也做不了,导致效率极低。对于这种情况就原创 2017-07-10 22:00:18 · 245 阅读 · 0 评论 -
java并发编程--并发容器CopyOnWriteArrayList
概述CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写原创 2017-07-11 20:46:45 · 353 阅读 · 0 评论 -
Volatile关键字解读(四)
volatile原理前面讲解了一些内存相关的基础知识作为本节的一个铺垫,本节开始讲解volatile的用法原创 2017-07-02 23:18:09 · 205 阅读 · 0 评论 -
Volatile关键字解读(三)
Java内存模型前面讲解了内存模型的基本知识,本节主要对Java内存模型进行说明原创 2017-07-02 18:13:51 · 233 阅读 · 0 评论 -
Volatile关键字解读(二)
并发编程三要素在并发编程的过程中,我们经常会遇到这三种问题:原子性、有序性和可见性原创 2017-07-02 17:46:05 · 174 阅读 · 0 评论 -
Volatile关键字解读(一)
volatile关键字很多人都听说过,但真正使用起来并不是那么简单容易,因为这关系到很多内存模型相关的知识点,本人最近在网上翻看了很多资料,在此做一下总结原创 2017-07-02 17:05:05 · 217 阅读 · 0 评论 -
Java并发编程--CAS(Compare And Swap)无锁算法
转发: http://www.cnblogs.com/Mainz/p/3546347.html锁的代价锁是用来做并发控制的,代价也是非常高的。当我们内核进行一次加锁操作时操作系统进行了一次上下文的切换,加锁和释放锁会导致比较多的上下文切换和调度的延迟,而等待锁的线程会被挂起直到锁释放。转载 2017-07-16 14:37:33 · 272 阅读 · 0 评论 -
Java并发编程--AQS原理介绍
AQS介绍AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。来看下同步组件对AQS的使用:AQS是一个抽象类,主是是以继承的方式使用。AQS本身是没有实现任何同步接口的,它仅仅只是定义了同步状态的获取和释放的方法来供自定义的同步组件的使用。从图中可以看出,在java的同步组件中,AQS的子类(Sync等)一般是同步组件的转载 2017-07-16 15:57:35 · 546 阅读 · 0 评论