在前面我们已经深入了解了AQS原理,本节介绍几个常用的基于AQS实现的并发工具类。
在前面我们已经深入了解了AQS原理,本节介绍几个常用的基于AQS实现的并发工具类。
JAVA帮助开发者封装了一些现成的线程池调用,但是每种线程池都有自己的使用场景,如果不了解里面的原理,那么很容易掉进坑里,线程池原理也是面试的重灾区,因此本问将完整分析线程池的原理。
我们知道,volatile保证了可见性,但是不能保证原子性,在面对线程安全问题时,就显地力不从心,那么除了synchronized关键字外,还有什么方式可以实现线程安全更新呢?本文首先介绍CAS是什么,引出JUC下一个重要的包:Atomic包。
volatile是比较重要的关键字,它涉及JMM,我们需要对其进行深入了解。
读写锁的出现是为了提高性能,思想是:读读不互斥,读写互斥,写写互斥。本文来了解一下读写锁的使用和锁降级的概念。
如果对并发编程稍微熟悉的话,就不会对ReentrantLock陌生,也可能对一些组件比如CountDownLatch,FutureTask以及Semaphore等同步组件耳闻过,他们都是JUC包下的类或者工具,他们都有一个共同的基础:AQS,即AbstractQueuedSynchronizer,从今天开始,让我们记住它,并且尝试去理解它。
上一章了解了synchronized的基本使用方式之后,接下来我们来深入了解了解其底层原理,并且说明对它的优化。
本文是关于JAVA多线程和并发的第五篇,在多线程学习和编程中,synchronized都是我们第一个要碰见的关键字,它很重要,因为它被认为还有优化的空间,并且它代表的是互斥锁的基本思想,JDK或者其他地方的源码随处可见,本文用一个卖票程序来切入synchronized的学习,从语法和使用上进行全面了解,并且对其引申出来的一些概念进行说明。
本文是关于JAVA多线程和并发的第四篇,本篇文章主要来看看线程相关的几个重要方法。
本文是关于JAVA多线程和并发的第三篇,主要介绍一下线程的几个状态的含义。