xuMengqi's Blog

> 分类: 并发编程


当只有一个任务时,使用单个线程执行可以很好地满足需求;但由于单个线程是串行执行任务的,随着任务的增多,处理速度会很慢,如下代码: java List<Task> tasks = IntStream.range(1, 100) .mapToObj(Task::new) .collect(Collectors.toList());...
2024年05月27日
徐梦旗

相比于synchronized内置锁隐式地加锁和释放锁的方式,ReentrantLock则采用显式地加锁和释放锁的方式,如下代码: java private final ReentrantLock lock = new ReentrantLock(); public void m() { lock.lock(); try { // ... method b...
2024年05月18日
徐梦旗

当多个线程对同一个变量进行修改时,可能会产生以下线程安全问题: CPU缓存导致的可见性问题。 指令重排序导致的有序性问题。 线程切换导致的原子性问题。 线程不安全的累加器 如下代码,UnsafeCount类是一个累加器: java public class UnsafeCount { private int value = 0; public void in...
2024年05月15日
徐梦旗

当共享资源被多个线程同时访问时,可能会产生不符合预期的并发问题。为了保证共享资源在某一时刻只能被一个线程访问到,则需要对资源进行加锁,为此Java提供了一种易用的内置锁synchronized[^1]。锁的添加和释放过程如下: 在访问共享资源前,线程需要获取锁。如果获取锁成功,则访问共享资源;如果获取锁失败,则阻塞该线程,等待其他线程释放锁之后重新尝试获取锁。 在访问共享资源后,持有锁...
2024年04月22日
徐梦旗