并发
java并发
VwenbinV
这个作者很懒,什么都没留下…
展开
-
11-线程池、forkjoin的原理分析
线程池、forkjoin的原理分析什么是线程池在Java中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个JVM里面创建太多线程,可能会使系统由于过度消耗内存或”切换过度“而导致系统资源紧张。为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有...原创 2020-01-15 14:02:35 · 502 阅读 · 0 评论 -
10-阻塞队列、原子操作的原理分析
阻塞队列、原子操作的原理分析生产者消费者的实际使用相信大家都有使用过分布式消息队列,比如ActiveMQ、kafka、RabbitMQ等等,消息队列是可以使得程序之间实现解耦,提升程序响应的效率。如果我们把多线程环境比作是分布式的话,那么线程于线程之间是不是也可以使用这种消息队列的方式进行数据通信和解耦呢?阻塞队列的使用案例注册成功后增加积分加入我们模拟一个场景,就是用户注册的时候,在...原创 2020-01-15 14:02:35 · 282 阅读 · 0 评论 -
09-ConcurrentHashMap源码分析
ConcurrentHashMap源码分析ConcurrentHashMap的初步使用及场景ConcurrentHashMap的使用ConcurrentHashMap是J.U.C包里面提供的一个线程安全并且高效的HashMap,所以ConcurrentHashMap在并发编程的场景中使用的频率比较高,这里我们就从ConcurentHashMap的使用上以及源码层面来分析ConcurrentH...原创 2020-01-15 14:02:35 · 198 阅读 · 0 评论 -
08-模板模式
模板模式 模板模式通常又叫模板方法模式(Template Method Pattern)是指定义一个算法骨架,并允许子类为一个或者多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤,属于行为型设计模式。模板方法适用于一下应用场景:一次性实现一个算法不变的部分,并将可变的行为留给子类来实现。各子类中公共的行为被提取出来 并集中到一个公共的父类中,...原创 2019-10-12 08:23:24 · 51 阅读 · 0 评论 -
07-Semaphore及源码分析
Semaphore及源码分析使用案例semaphore也就是我们常说的信号灯,semaphore可以控制同时访问的线程个数,通过acquire获取一个许可,如果没有就等待,通过release释放一个许可。有点类似限流的作用。叫信号灯的原因也和他的用处有关,比如某商场就5个停车位,每个停车位只能停一辆车,如果这个时候来了10辆车,必须要等前面有空的车位才能进入。使用场景Semaphore比较...原创 2019-10-27 12:42:44 · 55 阅读 · 0 评论 -
06-CountDwonLatch及源码分析
CountDwonLatch及源码分析countDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕在执行。从命名可以解读到countDown是倒数的意思,类似我们的倒计时的概念。CountDownLatch提供了两个方法,一个是countDown,一个是await,CountDownLatch初始化的时候需要传入一个整数,在这个整数倒数到0之前,调用了...原创 2019-10-27 12:42:44 · 151 阅读 · 0 评论 -
05-Condition及源码分析
Condition及源码分析前面学习synchronized的时候,有讲到wait/notify的基本使用,结合synchronized可以实现对线程的通信。那么这个时候我就思考了,既然J.U.C里面提供了锁的实现机制,那J.U.C里面有没有提供类似的线程通讯工具呢?Condition就是这样的一个多线程协调的工具类,可以让某些线程一起等待某个条件(condition),只有满足条件时,线程才...原创 2019-10-27 12:42:44 · 85 阅读 · 0 评论 -
04-AQS底层原理分析
AQS底层原理分析J.U.C简介java.util.concurrent是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的Doug Lea。我们在接下来的课程中,会去剖析一些经典的比较常用的组件的设计思想。LockLock在J.U.C中是最核心的组件,前面我们将synchronized的时候说...原创 2020-01-15 14:02:35 · 170 阅读 · 0 评论 -
03-volatile
Volatile初步认识Volatile一段代码引发的思考下面这段代码,演示了一个使用volatile以及没使用volatile这个关键字,对于变量更新的影响package jvm;public class VolatileDemo { public /*volatile*/ static boolean stop = false; public static voi...原创 2020-01-15 14:02:35 · 75 阅读 · 0 评论 -
02-synchronized
Synchronized并发带来的问题线程的合理使用能够提升程序的处理性能,主要有两个方面:能够利用多核CPU以及超线程技术来实现线程的并行执行。线程的异步化执行相比于同步执行来说,异步执行能够很好的优化程序的处理性能提升并发吞吐量。以上两方面在提高处理性能的同时也带来了很多麻烦,举个简单的例子:多线程对于共享变量访问带来的安全性问题。一个变量i,假如一个线程去访问这个变量进行修改...原创 2019-10-27 08:04:45 · 76 阅读 · 0 评论 -
01-并发编程的基础
并发编程的基础进程进程的本质是一个正在执行的程序,程序运行时系统会创建一个进程,并且给每个进程分配独立的内存地址空间保证每个进程地址不会相互干扰。同时,在CPU对进程做时间片切换时,保证进程切换过程中仍然要从进程切换之前运行的位置开始执行。所以进程通常还会包括程序计数器、堆栈指针。有了进程以后,可以让操作系统从宏观层面实现多应用并发。而并发的实现是通过CPU时间片不断切换执行的。对于单核C...原创 2019-10-27 07:22:52 · 165 阅读 · 0 评论