并发编程
文章平均质量分 94
绅士同萌
这个作者很懒,什么都没留下…
展开
-
并发编程学习7—源码理解ConcurrentHashMap及其他线程安全集合类
线程安全集合类可以分为三大类:遗留的线程安全集合如 Hashtable , Vector使用 Collections 装饰的线程安全集合,如:重点介绍 java.util.concurrent.下的线程安全集合类,可以发现它们有规律,里面包含三类关键词:Blocking、CopyOnWrite、Concurrent。Blocking 大部分实现基于锁,并提供用来阻塞的方法。CopyOnWrite 之类容器修改开销相对较重。Concurrent 类型的容器。原创 2023-09-30 12:22:38 · 75 阅读 · 0 评论 -
并发编程学习8—AQS和ReentrantLock源码解析
全称是 AbstractQueuedSynchronizer,抽象同步队列,简称 AQS ,是Java并发包的根基,J.U.C.并发包中的锁(lock)就是基于AQS实现的。是阻塞式锁和相关的同步器工具的框架(其他工具都是它的子类)。AQS是一个接口,这个接口定义了一系列规则,而是否要设定公平锁与否由实现它的类来决定。特点:用state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁。- getState - 获取 state 状态。原创 2023-09-30 12:15:01 · 50 阅读 · 0 评论 -
并发编程学习7—解密线程池
阻塞队列,为了平衡生产者和消费者(线程池)速度差异的组件。// 1) 队列满了就死等// 2) 带超时的等待// 3) 让调用者线程(main)放弃这个任务//log.debug("放弃{}", task);// 4) 让主线程抛出异常,和上面区别是让后面任务不执行了// throw new RuntimeException("任务执行失败" + task);// 5) 让调用者自己执行任务task.run();});i < 4;try {原创 2023-09-30 12:06:19 · 47 阅读 · 0 评论 -
并发编程学习6—深入理解CAS和Volatile
前面都是讲的共享模型之加锁,本章介绍共享模型之无锁。原创 2023-09-30 11:58:36 · 456 阅读 · 0 评论 -
并发编程学习5—深入理解Java内存模型
JMM(Java Memory Model), 从java层面定义了主存(所有线程共享的数据)、工作内存(线程私有数据)抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等,很复杂,很难搞清,所以在java层面抽象,用关键字控制底层运作。JMM 体现在以下几个方面:原子性- 保证指令不会受到线程上下文切换的影响。可见性- 保证指令不会受 cpu 缓存的影响。有序性- 保证指令不会受 cpu 指令并行优化的影响。能保证3个,volatile只能保证后两个)原创 2023-09-30 11:32:43 · 45 阅读 · 0 评论 -
并发编程学习4—深入浅出线程状态
while(条件不成立) {// 干活//另一个线程当调用t.start()方法时,由 NEW --> RUNNABLE。原创 2023-09-29 22:45:21 · 47 阅读 · 0 评论 -
并发编程学习3—深度解析各种锁
monitor翻译为监视器或管程。原创 2023-09-29 22:26:08 · 44 阅读 · 0 评论 -
并发编程学习2—线程安全的详细分析
/ 获取静态变量i的值iconst_1// 准备常量1iadd// 自增// 将修改后的值存入静态变量i// 获取静态变量i的值iconst_1// 准备常量1isub// 自减// 将修改后的值存入静态变量i而 Java 的内存模型如下,完成静态变量的自增,自减需要在主存和工作内存中进行数据交换:是单线程以上 8 行代码是顺序执行(不会交错)没有问题,多线程就会出错。原创 2023-09-29 22:09:52 · 36 阅读 · 0 评论 -
并发编程学习1—解密进程与线程
程序由指令和数据组成。但指令要运行,数据要读写,就必须将指令加载到CPU,将数据加载到内存。进程就是用来加载指令,管理内存和IO的。进程可以看为一个程序的实例。一个进程里可以有多个线程。线程是一个指令流,它将以一定的顺序交给CPU执行。原创 2023-09-29 22:03:31 · 37 阅读 · 0 评论