Android技术书4 Java并发编程实战1 简介2 线程安全性3 对象的共享4 对象的组合5 基础构建模块6 任务执行7 取消和关闭8 线程池的使用9 图形用户界面应用程序10 避免活跃性危险11 性能与可伸缩性12 并发程序的测试13 显示锁14 构建自定义的同步工具15 原子变量与非阻塞同步 ...
分类:
移动开发 时间:
2017-08-14 11:30:55
阅读次数:
142
在非阻塞算法中不存在死锁和其他活跃性问题。 在基于锁的算法中,如果一个线程在休眠或自旋的同时持有一个锁,那么其他线程都无法执行下去,而非阻塞算法不会受到单个线程失败的影响。 锁的劣势 许多JVM都对非竞争锁获取和释放操作进行了极大的优化,但如果有多个线程同时请求锁,那么JVM就需要借助操作系统地功能 ...
分类:
编程语言 时间:
2017-07-07 18:14:50
阅读次数:
254
之所以用volatile修饰m是拒绝编译器对m++做优化。 使用O2编译并查看性能: 可见如果你的变量压根不会被多线程访问,并且对性能极度苛刻的话,还是不要用原子变量了吧。因为在有些平台上“A full memory barrier is created when this function is ...
分类:
其他好文 时间:
2017-06-26 20:06:32
阅读次数:
161
非阻塞的同步机制 简单的说,那就是又要实现同步,又不使用锁。 与基于锁的方案相比,非阻塞算法的实现要麻烦的多,但是它的可伸缩性和活跃性上拥有巨大的优势。 实现非阻塞算法的常见方法就是使用volatile语义和原子变量。 硬件对并发的支持 原子变量的产生主要是处理器的支持,最重要的是大多数处理器架构都... ...
分类:
编程语言 时间:
2017-06-25 10:19:51
阅读次数:
191
这篇的主题本应该放在最初的几篇。讨论的是并发编程最基础的几个核心概念。可是这几个概念又牵扯到非常多的实际技术。比方Java内存模型。各种锁的实现,volatile的实现。原子变量等等,每个都可以展开写非常多,尤其是Java内存模型,网上已经可以有非常几篇不错的文章,临时不想反复造轮子。这里推荐几篇J ...
分类:
其他好文 时间:
2017-06-08 18:52:16
阅读次数:
191
原子变量和非阻塞的同步机制 一、锁的劣势 1.在多线程下:锁的挂起和恢复等过程存在着很大的开销(及时现代的jvm会判断何时使用挂起,何时自旋等待) 2.volatile:轻量级别的同步机制,但是不能用于构建原子复合操作 因此:需要有一种方式,在管理线程之间的竞争时有一种粒度更细的方式,类似与vola ...
分类:
编程语言 时间:
2017-06-06 11:58:28
阅读次数:
277
线程或者锁在并发变成在并发编程中的作用,类似于铆钉和工字梁在土木工程中的作用。 java中主要的同步机制是关键字synchroinzed,它提供了一种独占的加锁方式,但“同步”这个术语还包括voliatile类型的变量,显式锁(Explicit Lock)以及原子变量。 当多个线程访问某个类时,这个 ...
分类:
其他好文 时间:
2017-05-18 18:45:42
阅读次数:
193
1. 锁的劣势:(包括syncronized实现的内置锁、ReentrantLock) (1)开销大:线程的挂起与恢复存在很大开销,并且存在着较长时间的中断。 2. volatile变量: (1)优势:更轻量级的同步机制,在使用这些变量时不会发生上下文切换或线程调度,提供了内存可见性保证 (2)劣势 ...
分类:
其他好文 时间:
2017-05-06 15:08:19
阅读次数:
271
java的原子变量类似c++的InterlockedDecrement()操作。其实就是在进行算术时,把整个算式看为一个整体,并且保证同一时间只计算该式子一次。 它的用途比如,多个线程可能会调用某个函数。但是现在只希望它被调用一次后就不被调用了。此时就可以用原子变量来控制,它比对整个方法加锁更加高效 ...
分类:
编程语言 时间:
2017-04-25 11:35:22
阅读次数:
197
这篇说说java.util.concurrent.atomic包里的类,总共12个。网上有非常多文章解析这几个类。这里挑些重点说说。 这12个类能够分为三组: 1. 普通类型的原子变量 2. 数组类型的原子变量 3. 域更新器 普通类型的原子变量的6个, 1. 当中AtomicBoolean, At ...
分类:
编程语言 时间:
2017-04-25 10:06:13
阅读次数:
488