
并发
文章平均质量分 92
skier~
Java 偏执狂
展开
-
Java 线程池
一、线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。我们这里所说的线程池是指DK中提供的ThreadPoolExecutor类。使用线程池的好处:原创 2021-11-27 07:38:40 · 124 阅读 · 0 评论 -
volatile底层原理
1、常见面试题volatile关键字的作用是什么?volatile能保证原子性吗?之前32位机器上共享的long和double变量的为什么要用volatile?i++为什么不能保证原子性?volatile是如何实现可见性的?volatile是如何实现有序性的?2、volatile的作用1、volatile保证可见性Java 编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排它锁单独获得这个变量。Java 语言提供了 volatile,在某些情况下比锁原创 2021-11-27 07:38:04 · 252 阅读 · 0 评论 -
synchronized底层原理
一、常见面试题什么是锁的升级和降级什么是JVM里的偏向锁、轻量级锁、重量级锁不同JDK里的Synchronized的实现二、Synchronized的使用代码块形式:// 这个括号中的对象可以是this,也可以是自定义的 Object // 还可以是这个类的class对象, 类.classsynchronized (this) { // 同步代码块}方法形式:// 锁对象默认是this public synchronize原创 2021-11-27 07:37:29 · 91 阅读 · 0 评论 -
Java并发之JMM
JMM 内存模型为什么需要内存模型?我们知道 CPU 的运算速度是很快的,与内存也有几个数量级上的差距,所以一般现代计算机系统都会在内存与 CPU 之间加入一层或多层读写速度尽可能接近 CPU 运算速度的高速缓存来作为缓冲。将运算需要使用的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。为此,这不可避免的带来了一个新的问题:缓存一致性(Cache Coherence)。就是说当多个 CPU 的运算任务都涉及同一块主内存区域时,将可能导致原创 2021-11-26 22:46:18 · 314 阅读 · 0 评论 -
happens-before
为什么要有 happens-beforehappe-before 是 JMM 最核心的概念,对应 Java 程序员来说,理解 happens-before 是理解 JMM 的关键。从 JMM 设计者的角度来看,可见性和有序性其实是互相矛盾的两点:一方面,对于程序员来说,我们希望内存模型易于理解、易于编程,为此 JMM 的设计者要为程序员提供足够强的内存可见性保证,专业术语称之为 “强内存模型”。而另一方面,编译器和处理器则希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化(比原创 2021-11-26 22:44:44 · 333 阅读 · 0 评论 -
ConcurrentHashMap杂谈
为什么使用ConcurrentHashMap在并发编程中使用HashMap可能导致程序死循环,而使用线程安全的HashTable效率又非常低下线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%死循环案例:final HashMap<String, String> map = new HashMap<String, String>(2);Thread t = new Thread(new Runn原创 2020-12-26 22:45:05 · 5684 阅读 · 11 评论