随笔分类 - 聊聊并发
摘要:一、乐观锁和悲观锁 1、乐观锁 乐观锁只是一种设计思想,并不是真的有一种锁是乐观的。 思想:每次操作共享数据之前,都认为其他线程不会修改数据,所以都不获取锁,直接操作。只在最后更新的时候会判断一下在此期间是否有其他线程更新过这个数据。其实是一种无锁状态的更新。 典型实现:数据库版本号;CAS算法。
阅读全文
摘要:一、原子类 1、CAS算法 强烈建议读者看这篇之前,先看这篇 初识JUC 的前两节,对原子性,原子变量,内存可见性有一个初步认识。 CAS(Compare and Swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问,是硬件对于并发操作共享数
阅读全文
摘要:一、概述 1、介绍 在使用线程时,需要new一个,用完了又要销毁,这样频繁的创建和销毁很耗资源,所以就提供了线程池。道理和连接池差不多,连接池是为了避免频繁的创建和释放连接,所以在连 接池中就有一定数量的连接,要用时从连接池拿出,用完归还给连接池,线程池也一样。 线程池:一种线程使用模式。线程过多会
阅读全文
摘要:一、概述 1、介绍 强烈建议读者看这篇之前,先了解队列相关知识,以及生产者与消费者模式。 concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全"传输"数据的问题。通过这些高效并且线程安全的队列类,为快速搭建高质量的多线程程序带来极大的便利。 阻塞队列,首先它是一
阅读全文
摘要:一、概述 1、介绍 JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为: CountDownLatch:减少计数。减一计数器。 CyclicBarrier:循环栅栏。加一计数器。 Semaphore:信号灯。 脑图:https://w
阅读全文
摘要:一、等待唤醒机制 1、介绍 wait():一旦执行此方法,当前线程进入阻塞状态,并释放锁。 notify():一旦执行此方法,就会唤醒一个被wait()的线程。如果有多个,就唤醒优先级高的,如果优先级一样,则随机唤醒一个。 notifyAll():一旦执行此方法,会唤醒所有wait()的线程。 no
阅读全文
摘要:一、volatile 1、介绍 JDK 5.0 提供了java.util.concurrent包,在此包中增加了并发编程中很常用的使用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步IO和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文的Collection实现等。
阅读全文