JAVA并发编程笔记
文章平均质量分 85
冰箱里的金鱼
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第 6 章 Java 并发包中锁原理剖析Part two
6.3 读写锁 ReentrantReadWriteLock 的原理解决线程安全问题使用就可以,但是是独占锁,某时只有一个线程可以获取该锁,而实际中会有的场景,显然满足不了这个需求,所以应运而生。采用读写分离的策略,允许多个线程可以同时获取读锁。读写锁的内部维护了一个和一个WriteLock,它们依赖Sync实现具体功能。而Sync继承自AQS,并且也提供了公平和非公平的实现。[这里说的是非公平锁],我们知道AQS中只维护了一个state状态,而。原创 2024-12-08 22:30:05 · 1712 阅读 · 0 评论 -
第 6 章 Java 并发包中锁原理剖析Part one
如果锁当前没有被其他线程占用并且当前线程之前没有获取过该锁,则当前线程会获取到该锁,然后设置当前锁的拥有者为当前线程,并设置 AQS。方法类似,它的不同在于,它对中断进行响应,就是当前线程在调用该方法时,如果其他线程调用了当前线程的 interrupt。尝试释放锁,如果当前线程持有该锁,则调用该方法会让该线程对该线程持有的 AQS 状态值减 1。,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而被放入该锁的。尝试获取锁,如果当前该锁没有被其他线程持有,则当前线程获取该锁并返回。原创 2024-12-05 23:27:58 · 722 阅读 · 0 评论 -
第 5 章 Java 并发包中并发 List 源码剖析
CopyOnWriteArrayList 是一个线程安全的 ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略,用来保证。首先获取独占锁以保证删除数据期间其他线程不能对 array 进行修改,然后获取数组中要被删除的元素,并把剩余的元素复制到新数组之后使用新数组替换原来的数组,最后在返回前释放锁。主线程在子线程执行完毕后使用获取的迭代器遍历数组元素,从输出结果我们知道,在子线程里面进行的操作一个都没有生效,这就是迭代器弱一致性的体现。原创 2024-11-27 22:37:56 · 1720 阅读 · 0 评论 -
第 4 章 Java 并发包中原子操作类原理剖析
时,在高并发下大量线程会同时去竞争更新同一个原子变量,但是由于同时只有一个线程的CAS 操作会成功,这就造成了大量线程竞争失败后,会通过无限循环不断进行自旋尝试 CAS 的操作,而这会白白浪费。提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能已经很好了,但是 JDK。用来克服在高并发下使用 AtomicLong 的缺点。是原子性递增或者递减类,其内部使用 Unsafe 来实现,的性能瓶颈是由于过多线程同时去竞争一个变量的。这里的原子操作类都使用 CAS。LongAdder 简单介绍。原创 2024-11-26 21:10:50 · 584 阅读 · 0 评论 -
第 3 章 Java 并发包中 ThreadLocalRandom 类原理剖析
实例里面都有一个原子性的种子变量用来记录当前的种子值, 当要生成新的随机数时需要根据当前种子计算新的种子并更新回原子变量。实例生成随机数时,当多个线程同时计算随机数来计算新的种子 时,多个线程会竞争同一个原子变量的更新操作,由于原子变量的更新是 CAS。通过让每一个线程复制一份变量,使得在每个线程对变 量进行操作时实际是操作自己本地内存里面的副本,从而避免了对共享变量进行同步。种子计算新的种子,并使用新种子更新老的种子,再根据新种子计算随机数,就不会存在。中的随机数生成也使用的是。原创 2024-11-25 13:51:07 · 1179 阅读 · 0 评论 -
第 2 章 并发编程的其他基础知识
内置锁是排它锁, 也就是当一个线程获取这个锁后,其他线程必须等待该线程释放锁后才能获取该锁。拿到内部锁的线程会在正常退出同步代码块或者抛出异常后或者在同步块内调用了该内置锁资源的。能和吞吐量要求的提高,出现了处理海量数据和请求的要求,这些都对高并发编程有着迫。存里面的变量复制到自己的工作空间或者叫作工作内存,线程读写变量时操作的是自己工。内存模型规定,将所有的变量都存放在主内存中,当线程使用变量时,会把主内。时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会。原创 2024-11-19 23:17:10 · 886 阅读 · 0 评论 -
第 1 章 并发编程线程基础
下面看最后一种,即使用FutureTask的方式。原创 2024-11-18 23:12:16 · 1352 阅读 · 0 评论
分享