# 标签: 多线程
当只有一个任务时,使用单个线程执行可以很好地满足需求;但由于单个线程是串行执行任务的,随着任务的增多,处理速度会很慢,如下代码:
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日