程序猿小亮
精通JAVA,Mysql数据库、MQ、Redis、Netty等中间件。具有多年金融行业分布式开发经验。成功的路上,没有捷径,希望我的博文能够帮助您。
展开
-
多线程之内存可见性Volatile(一)
从这篇博文开始,我们开始分享一些多线程的内容,毕竟在工作中,使用多线程比较多。多总结一下,终归没有坏处。这个系列的文章不会特别长,争取在3到5分钟之间结束,主要以说明白内容,给出相应的解决方案,重点在于实践。如标题所示,这篇博文我们简单的介绍一下内存可见性问题,之前,要简单的介绍一下什么是内存模型?内存模型什么是JAVA 内存模型?Java Memory Model (JAVA 内存模型)是描述线程原创 2017-03-15 11:59:07 · 6629 阅读 · 9 评论 -
多线程之原子变量CAS算法(二)
上篇博文,我们介绍了多线程之内存可见性Volatile(一),但是也遗留了一个问题,如何保证变量的”原子性操作(Atomic operations)”?Volatile保证部分类型的原子性上篇博文,我们说Voloatile不能保证原子性,有一点局限: 因为在32位(4字节)处理器中,Java中读取long类型变量不是原子的,需要分成两步,如果一个线程正在修改该long变量的值,另一个线程可能只能看原创 2017-03-16 10:06:23 · 2938 阅读 · 6 评论 -
多线程之创建线程的方式之一:实现Callable接口(三)
对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说。这篇博文我们介绍第三种:实现Callable接口。原创 2017-03-16 17:23:03 · 5467 阅读 · 5 评论 -
多线程之重入锁ReentrantLock(四)
在博文多线程之内存可见性Volatile(一),多线程之原子变量CAS算法(二)中,我介绍了如何安全的访问共享对象,给了两种解决方案,java5.0之后,增加了lock接口的高级功能。这篇博文,我们介绍lock接口的一种实现,重入锁ReentrantLock,我们只是简单的介绍和synchronized进行一下对比。对于重入锁更加深入的内容,后面我们会再详细的写。ReentrantLockReent原创 2017-04-14 17:57:21 · 3365 阅读 · 11 评论 -
多线程之LockSupport,线程阻塞与唤醒(十四)
什么是LockSupportLockSupport是用来创建锁和其他同步类的基本线程阻塞原语。该类与使用它的每个线程关联一个许可证(与Semaphore类的意义上类似)。 如果许可证可用,将立即返回park ,并在此过程中消费; 否则可能会阻止。 如果尚未提供许可,则需要unpark获得许可。 (与Semaphore不同,许可证不会累积。最多只有一个。)看到上面的解释一头雾水,说人话:LockSupport类使用了一种名为permit(许可)的概念来做到阻塞和唤醒线程的功能,每个线程都有一个原创 2020-12-22 08:58:27 · 499 阅读 · 1 评论 -
多线程之死锁定位及故障分析,尽可能避免线上事故(十三)
前两篇博文,我们介绍了[线程池技术实现原理,这篇就够了](https://blog.csdn.net/jiuqiyuliang/article/details/102383861)以及线程池的拒绝策略,以及生产环境如何合理设置参数,比较彻底的介绍了线程池。我们对多线程已经介绍了很多的内容,针对多线程,高并发的分布式系统,编写的代码一定会有问题,而且问题比较多。那么有哪些问题是比较常见的问题呢?死锁就是其中一个比较常见的问题,这篇博文我们介绍什么是死锁,以及死锁产生的原因,还有定位死锁。原创 2020-07-03 09:56:32 · 688 阅读 · 0 评论 -
多线程之线程池的拒绝策略,以及生产环境如何合理设置参数(十二)
上篇博文,我们详细的介绍了[线程池的原理](https://blog.csdn.net/jiuqiyuliang/article/details/102383861),这篇我们重点介绍线程池的饱和策略,以及生产环境如何合理设置参数。为什么我们要单独拿出一篇博文来写饱和策略以及配置参数呢?因为自定义线程池配置的重点就两项:一、选择合适的线程池类型,二、配置合适的饱和策略与参数。原创 2020-02-24 09:54:02 · 1393 阅读 · 0 评论 -
多线程之线程池技术实现原理,这篇就够了(十一)
在Java语言中,有两种比较常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口。并且在前面的博文中我们也介绍了有返回结果的创建线程的方式。这篇博文我们就重点介绍线程池,内容如下:文章目录为什么使用线程池?线程池如何使用?架构说明线程池有几种实现参数对比应用场景对比ThreadPoolExecutor线程池的七大重要...原创 2020-02-18 09:55:46 · 776 阅读 · 3 评论 -
多线程之Condition的await和signal、signalAll等待/通知机制(十)
上篇博文,我们介绍了Condition的简介及原理,我们这篇重点介绍Condition的await和signal等待/通知机制,以及源码。原理相关的内容上篇博文,我们基本已经介绍完了,我直接看Condition接口的源码。await 方法先贴一波代码加注释:public final void await() throws InterruptedException { if (Thr...原创 2019-12-17 09:53:11 · 1837 阅读 · 0 评论 -
多线程之Condition的简介及原理解析(九)
上篇博文,我们重点介绍阻塞队列BlockingQueue,并实现了生产者和消费者模式。这篇博文,我们重点介绍Condition的相关内容,我们会通过两篇博文来介绍Condition。这篇是对Condition的简介,与Object类的等待通知模式简单对比,Condition接口具体实现,以及等待队列原理解析。然后通过源码解读,看具体实现并使用Condition实现生产者和消费者模式。Condit...原创 2019-10-16 09:38:15 · 941 阅读 · 0 评论 -
多线程之阻塞队列BlockingQueue详解(八)
上篇博文,我们简单的介绍了多线程之Semaphore,这篇我们重点介绍阻塞队列BlockingQueue原创 2019-09-27 00:10:12 · 881 阅读 · 0 评论 -
多线程之Semaphore详解(七)
上篇博客我们介绍了一下CyclicBarrier,这篇博客我们详细的介绍Semaphore。原创 2019-09-26 08:54:18 · 616 阅读 · 0 评论 -
多线程之CyclicBarrier详解(六)
上篇博客我们介绍了一下 多线程之CountDownLatch详解.,这篇博客我们详细的介绍CyclicBarrier。原创 2019-09-25 09:22:51 · 743 阅读 · 0 评论 -
多线程之CountDownLatch详解(五)
上篇博客我们介绍了一下重入锁ReentrantLock,这篇博客我们详细的介绍CountDownLatch。CountDownLatch是什么?CountDownLatch如何工作?CountDownLatch应用demo原创 2019-09-23 16:10:18 · 935 阅读 · 1 评论