![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 72
Shawn Jeon
Contact e-mail: shawnjeon@163.com
展开
-
并发编程(十)
Concurrency Programming 十自定义线程池例子1自定义线程池例子2自定义线程池例子1class Pool { // 1. 连接池大小 private final int poolSize; // 2. 连接对象数组 private Connection[] connections; // 3. 连接状态数组 0 表示空闲, 1 表示繁忙 private AtomicIntegerArray states; // 4. 构造方法原创 2021-05-30 18:38:40 · 120 阅读 · 0 评论 -
并发编程(九)
Concurrency Programming 九共享模型之不可变可变和不可变类的使用例子不可变设计: 保护性拷贝(Defensive Copy)无状态类设计享元模式(Flyweight Pattern), 归类 Structual Patterns共享模型之不可变可变和不可变类的使用例子SimpleDateFormat日期格式化类, 由于是线程不安全的, 所以多线程调用时, 会时不时的抛异常 SimpleDateFormat sdf = new SimpleDateFormat原创 2021-05-25 20:07:45 · 200 阅读 · 0 评论 -
并发编程(八)
Concurrency Programming 八无锁并发: CAS(Compare And Swap)原子整数类原子引用类原子数组类原子字段更新器类原子累加器类Unsafe无锁并发: CAS(Compare And Swap)可在多核 CPU环境下无阻塞的方式来保证原子性. 它不是通过加锁的方式来保护共享变量的线程安全*特点: CAS适用于多核 CPU, 同时线程数不能多于核数的环境原理比较:悲观锁(synchronized/ReentrantLock): 当前线程抢到锁, 则其它线程会原创 2021-05-16 17:03:14 · 91 阅读 · 0 评论 -
并发编程(七)
Concurrency Programming 七Java JMM(Java Memory Model, 内存模型)可见性有序性volatile原理原子性终止模式之两阶段终止模式同步模式之 BalkingJava JMM(Java Memory Model, 内存模型)JMM定义了主存, 工作内存(抽象概念). 底层对应着 CPU寄存器, 缓存, 硬件内存, CPU指令优化等JMM体现在以下几个方面原子性: 保证指令不会受到线程上下文切换的影响可见性: 保证指令不会受 CPU缓存的影响有序原创 2021-05-06 21:13:21 · 116 阅读 · 1 评论 -
并发编程(六)
Concurrency Programming 六同步模式之顺序控制1. 固定运行顺序1.1 wait& notify版1.2 park& unpark版2. 交替输出2.1 wait& notify版2.2 ReentrantLock条件变量版2.3 park& unpark版同步模式之顺序控制1. 固定运行顺序1.1 wait& notify版public class App { private static Object obj = new O原创 2021-03-13 20:38:13 · 116 阅读 · 0 评论 -
并发编程(五)
Concurrency Programming 五死锁活锁饥饿ReentrantLock可重入可打断锁超时通过 ReentrantLock解决哲学家就餐问题公平锁条件变量死锁多个同步块使用同一个锁对象, 会严重降低程序的并发量. 此时可以通过多把锁(锁颗粒度细分化)方式, 给每个同步块(功能块)都分配专有锁对象, 来提升并发量. 但同一个线程获取多把锁(多个 synchronized同步块), 会容易引起死锁死锁演示代码 1:public class App { public原创 2021-03-12 21:21:29 · 100 阅读 · 0 评论 -
并发编程(四)
Concurrency Programming 四wait& notifywait& notify简单示例park& unparkpark& unpark原理wait& notify和 park& unpark的区别同步模式之保护性暂停异步模式之生产者/消费者wait& notify方法功能说明void wait()释放对象锁, 并将当前线程加到 Monitor.WaitSet内(阻塞等待)void notify()随原创 2021-03-10 19:16:14 · 144 阅读 · 0 评论 -
并发编程(三)
Concurrency Programming 三synchronized的3种锁1. 重量级锁: Monitor2. 轻量级锁2.1 锁膨胀(轻量级锁变为重量级锁)2.2 自旋优化(Adaptive Spinning)3. 偏向锁(Biased Locking)3.1 撤销3.2 批量重偏向3.3 批量撤销3.4 锁消除优化(Lock Elimination)3.5 锁粗化优化(Lock Coarsening)synchronized的3种锁偏向锁 2. 轻量级锁 3. 重量级锁1. 重量级锁:原创 2021-03-08 20:16:33 · 196 阅读 · 2 评论 -
并发编程(二)
Concurrency Programming 二并发之共享模型应用之互斥变量的线程安全常见线程安全类并发之共享模型临界区(Critical Section): 在一段代码块内, 存在多线程读写共享资源的操作, 称此段代码块为临界区竞争条件(Race Condition), 竞态条件: 不同的代码, 多线程读写相同的共享资源时, 由于执行顺序不同(字节码指令交错), 而导致结果无法预测, 称为发生了竞态条件应用之互斥互斥(Mutex): 通过竞争独占使用临界区, 同一时刻, 保证只能有一个线原创 2021-03-06 22:49:43 · 2286 阅读 · 9 评论 -
并发编程(一)
Concurrency Programming 一进程& 线程并发(Concurrent)& 并行(Parallel)同步(Synchronous)& 异步(Asynchronous)线程的五种状态(操作系统层面描述线程对象)线程的六种状态(Java API层面描述线程对象)创建线程实例线程阻塞直到获取结果(同步等待)线程类常用方法例子进程& 线程进程: 进程是用来加载指令, 管理内存和 IO的. 当一个程序被运行, 同时, 程序代码会从磁盘加载到内存, 这就是开启了原创 2021-03-06 09:37:37 · 234 阅读 · 3 评论