分类
正在加载今日诗词...
Atom 原子类 Atom 原子类
Atom 原子类在 Java Java 并发编程中,经常通过 synchronized 进行控制来达到线程安全的目的。但是由于 synchronized 是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上,在 J.U.C 下的 at
ExecutorService ExecutorService
ExecutorServiceExecutorService 是 java.util.concurrent 包的重要组成部分,是 Java JDK 提供的框架,用于简化异步模式下任务的执行。 一般来说,ExecutorService 会自动
CompletableFuture CompletableFuture
CompletableFutureJava 8 开始引入了 CompletableFuture,它针对 Future 做了改进,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调对象的回调方法。 CompletableFuture
StampedLock StampedLock
StampedLockReadWriteLock 可以解决多线程同时读,但只有一个线程能写的问题。 ReadWriteLock 有个潜在的问题:如果有线程正在读,写线程需要等待读线程释放锁后才能获取写锁,即读的过程中不允许写,这是一种悲观的
ThreadLocal ThreadLocal
ThreadLocal对于多任务,Java 标准库提供的线程池可以方便地执行这些任务,同时复用线程。那么如何在一个线程内传递状态? 如下栗子,一个内部需要调用若干其他方法,同时传递参数 user。 public void process(U
CountDownLatch CountDownLatch
CountDownLatchCountDownLatch 中 count down 是倒数的意思,latch 则是门闩的含义。整体含义可以理解为倒数的门栓,似乎有一点“三二一,芝麻开门”的感觉。 在构造 CountDownLatch 的时候
ForkJoin ForkJoin
ForkJoinJava 7 开始引入了一种新的 Fork/Join 线程池,它可以执行一种特殊的任务:把一个大任务拆成多个小任务并行执行。 Fork/Join 任务的原理:判断一个任务是否足够小,如果是,直接计算,否则,就分拆成几个小任务
ReentrantLock ReentrantLock
ReentrantLock从 Java 5 开始,引入了一个高级的处理并发的 java.util.concurrent 包,它提供了大量更高级的并发功能,能大大简化多线程程序的编写。 我们知道 synchronized 关键字用于加锁,但这
ReadWriteLock ReadWriteLock
ReadWriteLock前面讲到的 ReentrantLock 保证了只有一个线程可以执行临界区代码: public class Counter { private final Lock lock = new ReentrantL
synchronized 关键字 synchronized 关键字
synchronized 关键字synchronized 关键字采用对代码块/方法体加锁的方式解决 Java 中多线程访问同一个资源时,引起的资源冲突问题。 一句话总结:synchronized 能够保证同一时刻最多只有一个线程执行某段代码
Java 并发 Java 并发
Java 并发线程状态转换 新建(New)创建后尚未启动。 可运行(Runnable)可能正在运行,也可能正在等待 CPU 时间片。包含了操作系统线程状态中的 Running 和 Ready。 阻塞(Blocked)等待获取一个排它锁,如果
volatile 关键字 volatile 关键字
volatile 关键字volatile 关键字使一个变量在多个线程间可见。 A、B 线程都有用到一个变量,java 默认是 A 线程缓冲区保留一份 copy,这样如果 B 线程修改了变量,则 A 线程未必知道。使用 volatile 关键
1 / 2