03 2018 档案

摘要:写在前面 前面三篇博客分别介绍了CyclicBarrier、CountDownLatch、Semaphore,现在介绍并发工具类中的最后一个Exchange。Exchange是最简单的也是最复杂的,简单在于API非常简单,就一个构造方法和两个exchange()方法,最复杂在于它的实现是最复杂的(本 阅读全文
posted @ 2018-03-08 14:08 qtyy 阅读(245) 评论(0) 推荐(0) 编辑
摘要:写在前面 Semaphore是一个计数信号量,它的本质是一个"共享锁"。 信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可 阅读全文
posted @ 2018-03-08 12:46 qtyy 阅读(273) 评论(0) 推荐(0) 编辑
摘要:写在前面 CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 注意比较CountDownLatch和CyclicBarrier: 阅读全文
posted @ 2018-03-08 10:36 qtyy 阅读(258) 评论(0) 推荐(0) 编辑
摘要:写在前面 CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“:用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程, 阅读全文
posted @ 2018-03-08 09:57 qtyy 阅读(263) 评论(0) 推荐(0) 编辑
摘要:写在前面 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读势必会导致性能降低。所以就提供了读写锁。 读写锁维护着一对锁,一个读锁和一 阅读全文
posted @ 2018-03-07 11:18 qtyy 阅读(308) 评论(0) 推荐(0) 编辑
摘要:写在前面 在没有Lock之前,我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在Java SE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作 阅读全文
posted @ 2018-03-06 21:03 qtyy 阅读(349) 评论(0) 推荐(0) 编辑
摘要:写在前面 ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。 API介绍如下: 一个可重入的互斥锁定 Lock,它具有与使用 syn 阅读全文
posted @ 2018-03-01 16:36 qtyy 阅读(195) 评论(0) 推荐(0) 编辑
摘要:写在前面 在前面提到过,AQS是构建Java同步组件的基础,我们期待它能够成为实现大部分同步需求的基础。AQS的设计模式采用的模板方法模式,子类通过继承的方式,实现它的抽象方法来管理同步状态,对于子类而言它并没有太多的活要做,AQS提供了大量的模板方法来实现同步,主要是分为三类:独占式获取和释放同步 阅读全文
posted @ 2018-03-01 16:30 qtyy 阅读(221) 评论(0) 推荐(0) 编辑
摘要:写在前面 Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JV 阅读全文
posted @ 2018-03-01 16:12 qtyy 阅读(269) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示