随笔分类 - Java并发编程学习笔记
摘要:所谓原子性操作,指执行一系列操作时,这些操作要么全部执行,要么全部不执行,不存在只执行其中一部分的情况。 计数器情况: 一般在设计计数器的时候都是先读取当前值,然后 +1,最后更新。真个过程是读 改 写的过程,如果不能保证该过程的原子性,那么就会出现线程安全问题。如下代码就不能保证 ++a 是原子性
阅读全文
posted @ 2018-12-27 11:20
扇影无风
摘要:原子(atomic)本意时“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。 Java 如何实现原子操作 在 Java 中可以通过锁和循环 CAS 的方式实现原子操作。 <! more 1、使用循环 CAS 实现原子操作 JVM 中的
阅读全文
posted @ 2018-12-27 11:19
扇影无风
摘要:乐观锁 总是假设最好的情况,每次取数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断在此期间有没有别人更新这个数据,可以使用版本号机制和 CAS 算法实现。乐观锁适用于多读的场景,这样可以提高吞吐量。 <! more 悲观锁 总是假设最坏的情况,每次去取数据的时候都认为别人会修改,所
阅读全文
posted @ 2018-12-27 11:17
扇影无风
摘要:CAS 指的是目前 CPU 中广泛支持的一种对内存中的共享数据进行操作的特殊指令,这个指令会对内存中的共享数据进行原子性操作。 CAS 操作过程 CPU 会将内存中将要被更改的数据与期望值做比较,相同则将内存中的值替换成新的值,否则不做操作,最后 CPU 将原来的旧值返回。其中这一系列操作是原子的。
阅读全文
posted @ 2018-12-27 11:02
扇影无风
摘要:在多线程编程中,线程个数一般要大于CPU个数,而每个CPU在同一时刻只能被一个线程使用,为了让用户感觉多个线程同时执行,CPU资源的分配采用了时间轮转的策略,也就是给每个线程分配一个时间片,线程在分配时间片内占用CPU执行任务,使用完时间片后,就会处于就绪状态并让出CPU让其它线程占用,这就是上下文
阅读全文
posted @ 2018-11-17 10:31
扇影无风
摘要:[TOC] 一、ThreadLocal 的理解 ThreadLocal 由 JDK 包提供,它提供了线程本地变量,如果创建了一个 ThreadLocal 变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本。当多个线程操作这个变量的时候,实际上是操作自己本地内存里面的变量,从而避免了线程安全
阅读全文

浙公网安备 33010602011771号