热文ReadWriteLock与ReentrantReadWriteLock
`ReadWriteLock` 维护了一对相关的`锁`,一个用于只读操作,另一个用于写入操作。只要没有 writer,`读取锁`可以由多个 reader 线程同时保持。`...
热文CyclicBarrier
`CyclicBarrier`字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarri...
热文Semaphore
Semaphore翻译成字面意思为 信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释...
热文CountDownLatch
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行...
热文AbstractQueuedSynchronizer 同步组件 AQS对同步组件 基础知识介绍
AbstractQueuedSynchronizer是JAVA 5构建同步组件的基础,通常简称为AQS。AQS是java并发包中最核心的一个类,没有之一。可以说没有弄懂A...
热文LockSupport基本介绍与基本使用
LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语。java锁和同步器框架的核心 AQS: AbstractQueuedSynch...
热文volatile关键字是如何保证可见性的
在前面我们提到volatile关键字可以保证多个线程运行时的可见性问题。在单核CPU的情况下,是不存在可见性问题的,如果是多核CPU,可见性问题就会暴露出来。
热文自旋锁解决StackOverflowError案例
问题介绍:笔者负责的一个Java Web项目在启动的时候,需要有一些初始化操作,而接下来的代码的执行必须要等到相关初始化操作完成。为了实现这个等待的功能,这个项目之前的...
热文sleep()方法与wait方法的区别
在面试的时候,我们经常会遇到一个问题:sleep()方法与wait()方法区别。二者的作用都是进行等待。区别在于 1、sleep()方法是Thread对象中定义的方法,而...
热文wait()、notify()、notifyAll()与线程通信方式总结
`线程通信`的目标是使线程间能够`互相发送信号`。另一方面,线程通信使线程能够`等待其他线程的信号`。例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准...
热文同步方法与同步代码块的区别
在面试中,我们经常遇到的一个问题是,同步方法与同步代码块的区别。或者另一种提问方式,在实际开发中,是使用同步代码块好,还是使用同步方法好。 这个考验的是实际上是读者对ja...
热文Java类锁、对象锁、私有锁、隐式锁
为了明确后文的描述,先对本文涉及到的锁的相关定义作如下约定: 1. 类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(x...
热文四种不同的同步代码块
Java中的同步块用`synchronized`标记。同步块在Java中是同步在某个对象上,事实上在java中,任何一个对象都可以作为一个锁。所有同步在一个对象上的同步块...
热文多线程共享资源问题演示
Java同步代码块(`synchronized block`)和锁是用来避免多个线程对共享资源产生竞争,导致运行结果与期望不符合的一种机制。同步代码块和锁是Java并发编...
热文ThreadGroup
线程组(`ThreadGroup`)表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组(system)外,每个线程组都有一个父...
热文Thread对象run方法与start()方法的区别
Thread对象`run`方法与`start`()方法的作用不同,`start`()方法用于启动线程,`run`()方法用于执行线程的运行时代码。通过start方法启动线...
热文创建并运行Java运行时代码的三种方式
在Java中,创建线程`运行时代码`有三种方式。 第一种:继承`Thread`类,覆写其`run`方法,这种方式我们在之间的案例中已经见过。 第二种:实现`Runna...