Java多线程专题
文章平均质量分 76
Java多线程
Malax
这个作者很懒,什么都没留下…
展开
-
Synchronized的底层实现原理
一、Synchronized 核心组件Wait Set:那些调用 wait 方法被阻塞的线程被放置在这里;Contention List:竞争队列,所有请求锁的线程首先被放在这个竞争队列中;Entry List:Contention List 中那些有资格成为候选资源的线程被移动到 Entry List 中;OnDeck:任意时刻,最多只有一个线程正在竞争锁资源,该线程被成为 OnDeck;Owner:当前已经获取到所资源的线程被称为 Owner;!Owner:当前释放锁的线程二、重量.原创 2021-09-17 11:35:14 · 364 阅读 · 0 评论 -
Java线程池详解
一、线程池的好处1、 降低资源消耗2、提高响应速度3、 方便管理线程复用、控制最大线程数、管理线程二、三大方法import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; // Executors工具类、3大方法public class Demo01 { public static void main(String[] args) { ExecutorService th原创 2021-09-15 13:53:26 · 178 阅读 · 0 评论 -
Semaphore、CountdownLatch、CyclicBarrier
一、SemaphoreSemaphore可以用作信号量,控制同时访问共享资源的线程数量上限!public static void main(String[] args) { // 1. 创建 semaphore 对象 Semaphore semaphore = new Semaphore(3); // 2. 10个线程同时运行 for (int i = 0; i < 10; i++) { new Thread(() -> { // 3. 获取许可 tr原创 2021-08-06 00:23:31 · 146 阅读 · 0 评论 -
HashMap、ConcurrentHashMap源码解析
哈希算法哈希算法(也叫散列算法),任意长度的值通过哈希算法会变得到一个固定的key(地址),之后可以将数据存储在该位置上。简单地说,它通过将关键码值映射到表的一个固定位置上,以加快查询速度! 比如说Hashcode就是一个具体的哈希算法,它首先会计算出一个字符串的ascii码,之后进行取模(节省空间并且不会超出哈希表的下标),算出它存储在哈希表中的下标(如下图所示)。哈希表在JDK1.8之前HashMap的底层结构采用的是哈希表。但是当HashMap存储大量数据的时候哈原创 2021-07-18 17:28:42 · 331 阅读 · 1 评论 -
偏向锁、轻量级、重量级锁
一、Object结构1. 32位虚拟机2. 64位虚拟机原创 2021-08-01 19:25:03 · 475 阅读 · 0 评论 -
volatile底层实现原理
SA原创 2021-08-01 13:37:53 · 7727 阅读 · 1 评论 -
多种锁的概念
死锁、活锁、自旋锁、可重入锁、不可重入锁、轻量级锁、重量级锁、乐观锁、悲观锁、公平锁、非公平锁原创 2021-07-30 23:47:15 · 197 阅读 · 0 评论 -
链式编程、函数式接口、lambda表达式、Stream流式计算
1.链式编程链式编程是将多个操作通过点号"."链接在一起成为一个整体,从而更加的简洁方便。链式编程的原理就是每个操作完成后都会返回一个this对象,也就是返回对象本身!StringBuffer builder = new StringBuffer();builder.append("blake") .append("bob") .append("alice") .append("linese") .append("eve");2.函数式接口原创 2021-07-28 20:27:02 · 4007 阅读 · 0 评论 -
如何解决并发环境下集合的线程安全问题?
一、COW思想二、ArrayList部分1.使用Vector代替ArrayList:Vector是线程安全的List<String> list=new Vector<>();2.使用Collections.synchronizedList()将ArrayList转换为线程安全的List<String> list=Collections.synchronizedList(new ArrayList<>());3.CopyOnWrite:使用时复制原创 2021-07-20 14:40:06 · 276 阅读 · 1 评论 -
Synchroniazed和Static Synchroniazed区别
Synchroniazed:Synchroniazed如果加在方法上表明是对当前实例对象加锁,在这种情况下当前实例的所有同步方法(Synchroniazed)无法被同时访问,涉及到的只有一个实例对象!Static Synchroniazed:Static Synchroniazed如果加在方法上表明是对当前实例的Class对象 (全局唯一) 加锁,在这种情况下该类所有实例的静态同步方法(Static Synchroniazed)无法被同时访问,涉及到该类的所有实例对象!pulbic class Test原创 2021-07-18 16:57:25 · 187 阅读 · 1 评论