随笔分类 -  Java并发编程

5.volatile的应用
摘要:volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和 阅读全文

posted @ 2017-02-20 17:11 近博 阅读(417) 评论(0) 推荐(0)

4.资源限制
摘要:资源限制的一种场景: 服务器的带宽只有2Mb/s,某个资源的下载速度是1Mb/s每秒,系统启动10个线程下载资源,下载速度不会变成10Mb/s,所以在进行并发编程时,要考虑这些资源的限制。硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU的处理速度。软件资源限制有数据库的连接数和socket连 阅读全文

posted @ 2017-02-20 16:02 近博 阅读(301) 评论(0) 推荐(0)

3.死锁
摘要:避免死锁的几个常见方法 避免一个线程同时获取多个锁 尽量保证每个锁只占用一个资源 尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制 对于数据库锁,加锁和解锁必须在一个数据库连接里 一个死锁的例子 在一些更为复杂的场景:t1拿到锁之后,因为一些异常情况没有释放锁(死循 阅读全文

posted @ 2017-02-20 16:00 近博 阅读(238) 评论(0) 推荐(0)

2.上下文切换
摘要:概念: CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换 测试上下文切换次数和时长 使用Lmbench3[1]可以测量上下文切换 阅读全文

posted @ 2017-02-20 15:47 近博 阅读(515) 评论(0) 推荐(0)

1.并发线程导致的问题
摘要:注:强烈建议多使用JDK并发包提供的并发容器和工具类来解决并发问题 阅读全文

posted @ 2017-02-20 15:34 近博 阅读(146) 评论(0) 推荐(0)

读写锁
摘要:读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升 一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读是多于写的。在读多于写的情况下,读写锁能够提供比排它锁更好的并发性和吞吐量。Java并发包提供读写锁的实现是ReentrantReadWrite 阅读全文

posted @ 2017-02-18 14:38 近博 阅读(442) 评论(0) 推荐(0)

重入锁
摘要:重入锁ReentrantLock 锁获取的公平性问题: 先对锁进行获取的请求一定先被满足,那么这个锁是公平的,反之,是不公平的。ReentrantLock提供了一个构造函数(传人一个布尔值),来控制锁是否是公平的 1.实现重进入 2.公平与非公平获取锁 公平与非公平获取锁的区别 :锁的获取顺序是否符 阅读全文

posted @ 2017-02-18 10:29 近博 阅读(1019) 评论(0) 推荐(0)

队列同步器的实现
摘要:队列同步器主要包括: 1. 同步队列 2. 首节点(head) 3. 尾节点(tail) 4 独占式获取与释放同步状态 5. 共享式获取与释放同步状态 6. 超时获取与释放同步状态 1.同步队列: 1.1 一个FIFO双向队列 1.2 当前线程获取同步状态失败时,会向队列中添加节点(Node) 节点 阅读全文

posted @ 2017-02-17 23:52 近博 阅读(675) 评论(0) 推荐(0)

导航