ReentrantLock ReentrantLock
ReentrantLock内部是一个AQS:AbstractQueuedSynchronizer 抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架 它维护了一个volatile int state(代表共享资源)和一个F
2022-05-05
synchronized synchronized
synchronizedsynchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者 代码块在任意时刻只能有一个线程执行。另外,在 Java 早期版本中,synchronize
2022-05-05
volatile volatile
Volatile 如何保证可见性在前面我们提到volatile关键字可以保证多个线程运行时的可见性问题。在单核CPU的情况下,是不存在可见性问题的,如果是多核CPU,可见性问题就会暴露出来。 我们知道线程中运行的代码最终都是交给CPU执行的
2022-05-05
线程池 线程池
为什么使用线程池? 降低资源消耗。 通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。 当任务到达时,任务可以不需要的等到线程创建就能立即执行。 提高线程的可管理性。 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源
2022-05-03
原子类 原子类
JUC 包中的原子类是哪4类?基本类型: 使用原子的方式更新基本类型 AtomicInteger:整形原子类 AtomicLong:长整型原子类 AtomicBoolean :布尔型原子类 数组类型: 使用原子的方式更新数组里的某个元
2022-05-03
CyclicBarrier详解 CyclicBarrier详解
CyclicBarrier可以理解为循环栅栏。栅栏就是一种障碍物,比如,通常在私人宅邸的周围就可以围上一圈栅栏,阻止闲杂人等入内。这里当然就是用来阻止线程继续执行,要求线程在栅栏处等待。前面Cyclic意为循环,也就是说这个计数器可以反复
2022-05-03
CountDownLatch详解 CountDownLatch详解
CountDownLatch是一个非常实用的多线程控制工具类。“Count Down”在英文中意为倒计数,Latch为门闩的意思。如果翻译成为倒计数门闩,我想大家都会觉得不知所云吧!因此,这里简单地称之为倒计数器。在这里,门闩的含义是:把
2022-05-03
并发级别 并发级别
由于临界区的存在,多线程之间的并发必须受到控制。根据控制并发的策略,我们可以把并发的级别进行分类,大致上可以分为阻塞、无饥饿、无障碍、无锁、无等待几种。 阻塞:一个线程是阻塞的,那么在其他线程释放资源之前,当前线程无法继续执行。当我们使
2022-05-03
引用 引用
强引用之前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。比如下面这段代码中的object和str都是强引用: 不会被垃圾回收器回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也
2022-05-03
并发基本概念 并发基本概念
同步和异步同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用更像一个消息传递,一旦开始,方法调用就会立即返回,调用者就可以继续后续的操作。而异步方法通常会在另外一个线程中
2022-05-03