
从入门到精通java并发编程
文章平均质量分 56
以java并发编程实战、并发编程的艺术两本书为指导,实战java并发程序。
Mr. 阿紫
关注我,阿紫陪你一起成为大牛
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
8. java并发包--ThreadLocalRandom和原子操作类
ThreadLocalRandom类是JDK7新增的JUC下的随机数生成器,弥补了Random类在多线程情况下的缺陷。1. java.util.Random类存在的问题Random类生成随机数原理:首先根据旧的种子生成新的种子,然后根据新的种子生成随机数。多线程情况下,为了避免多个线程同时根据旧种子生成相同的新种子,导致生成相同的随机数,Random类使用一个原子变量,用于保存初始化时的种子。通过循环CAS操作,以保证只有一个线程拿到旧种子来计算新种子。问题:多个线程通过CAS操作竞争原创 2021-10-26 08:38:22 · 193 阅读 · 0 评论 -
7.并发编程基本知识和基本原理
1.java中内存可见性问题JMM规定,所有变量都放在内存中,线程使用变量时,从内存中复制一份变量到线程工作空间,线程读写变量都是操作自己工作空间内部变量。由JMM可知,当线程A修改了变量C的值后,只修改了其本地内存的值,此时线程B并不知道线程A修改了变量C的值。导致变量C的值修改后不可见。共享内存不可见原因:与cpu多级缓存命中有关。JMM工作内存对应实际内存:JMM中对应的线程工作内存,对应CPU内部的L1、L2缓存、寄存器。2. 如何解决内存可见性问题?2.原创 2021-10-14 20:18:46 · 132 阅读 · 0 评论 -
6. ThreadLocal
反倒是看回放原创 2021-10-09 09:22:09 · 110 阅读 · 0 评论 -
5. 线程死锁
1.线程上下文切换缘由:cpu个数小于线程个数,为了让用户觉得所有程序都在并行进行,需要cpu切换时间片。线程A时间片结束后,为了下一次再次运行线程A时知道该从哪里继续运行,需要保存线程A的上下文信息。线程切换时机:线程的cpu时间片使用完毕时,线程被其他线程中断时。2.线程死锁从表现定义死锁:两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象。在无外力干涉情况下,这种情况会持续等待下去。...原创 2021-09-24 09:05:33 · 122 阅读 · 0 评论 -
4.线程中断
总结:yield方法告知cpu调度器,当前线程请求让出自己的cpu使用。线程让出cpu后处于就绪状态。下次cpu调度还可能有限调度到刚刚让出cpu的线程。和sleep和wait不同的是:sleep方法让出cpu到指定时间,阻塞挂起,但是不释放锁;wait方法让出cpu直到指定时间或被notify,阻塞挂起,同时释放锁资源。而yield方法仅仅是让出cpu,随后进入就绪状态。...原创 2021-09-17 17:45:20 · 222 阅读 · 0 评论 -
3.线程睡眠的Thread.sleep和让出cpu的Thread.yield静态方法
总结:代码块内调用Thread.sleep方法不会释放监视器等锁资源,被其他线程中断后会抛出中断异常。验证sleep不会释放锁资源代码示例:如果线程A获取了锁资源,睡眠过程中,线程B也想获取锁资源,但是获取失败。这间接验证了Thread.sleep静态方法睡眠过程中不会释放锁资源。private static final Lock LOCK = new ReentrantLock(); public static void main(String[] args) { Thread原创 2021-09-16 10:00:02 · 970 阅读 · 0 评论 -
2.等待线程终止的Thread.join方法
定义:主线程中执行子线程Thread.join()方法会让主线程等待子线程执行完毕。1.主线程调用子线程的join方法后阻塞自己等待子线程返回代码举例:main主线程首先会在调用threadOne.join()方法后被阻塞,等待threadOne执行完毕后返回。然后主线程调用threadTwo.join()方法后再次被阻塞,等待threadTwo执行完毕后返回。CountDownLatch工具更好用。//等待线程终止的join方法 Thread threadOne原创 2021-09-15 22:24:04 · 822 阅读 · 0 评论 -
1.并发编程挑战
书行天下(1)上下文切换上下文切换:cpu通过时间片来执行任务,时间片结束后,需要切换线程。任务从保存到再加载的过程就是上下文切换。上下文切换存在的问题:上下文切换存在时间的开销,因此线程个数对系统存在影响。如何减少上下文切换:无锁并发编程、CAS算法、使用最少线程、协程。无锁并发编程 :多线程竞争锁存在线程切换,例如多线程处理数据时,将数据id经过hash算法取模分段到不同线程计算,避免使用锁。 CAS算法:比较、交换、自旋 适当数量的线程 协程:在单线程中实现多任务调度,并在原创 2021-09-09 22:49:03 · 133 阅读 · 0 评论