> 分类: 并发编程
为什么需要异步编程? 每次只做一件事,更符合人脑思考的逻辑,更易于理解。如计算 ((7 * 3) + (17 + 23)) * (9 + 17),假设人脑每次思考需要耗时1s。 使用同步的方式: T0:计算 7 * 3 = 21 T1:计算 17 + 23 = 40 T2:计算 21...
当只有一个任务时,使用单个线程执行可以很好地满足需求;但由于单个线程是串行执行任务的,随着任务的增多,处理速度会很慢,如下代码: java List<Task> tasks = IntStream.range(1, 100) .mapToObj(Task::n...
相比于synchronized内置锁隐式地加锁和释放锁的方式,ReentrantLock则采用显式地加锁和释放锁的方式,如下代码: java private final ReentrantLock lock = new ReentrantLock(); public void m() { ...
当多个线程对同一个变量进行修改时,可能会产生以下线程安全问题: CPU缓存导致的可见性问题。 指令重排序导致的有序性问题。 线程切换导致的原子性问题。 线程不安全的累加器 如下代码,UnsafeCount类是一个累加器: java public class UnsafeCoun...
当共享资源被多个线程同时访问时,可能会产生不符合预期的并发问题。为了保证共享资源在某一时刻只能被一个线程访问到,则需要对资源进行加锁,为此Java提供了一种易用的内置锁synchronized[^1]。锁的添加和释放过程如下: 在访问共享资源前,线程需要获取锁。如果获取锁成功,则访问共享资...