
并发编程
文章平均质量分 87
lzcWHUT
这个作者很懒,什么都没留下…
展开
-
Java线程池的使用方法
由浅入深理解Java线程池及线程池的如何使用前言总体的架构研读ThreadPoolExecutor拒绝策略线程池的任务处理策略:线程池的关闭源码分析常见的四种线程池使用实例最后杂谈手动创建线程池有几个注意点前言多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担。线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Me...转载 2019-07-12 18:13:50 · 4034 阅读 · 1 评论 -
多线程如何保证线程安全
一、线程安全等级 之前的博客中已有所提及“线程安全”问题,一般我们常说某某类是线程安全的,某某是非线程安全的。其实线程安全并不是一个“非黑即白”单项选择题。按照“线程安全”的安全程度由强到弱来排序,我们可以将java语言中各种操作共享的数据分为以下5类:不可...转载 2019-08-01 15:26:30 · 847 阅读 · 0 评论 -
Java 中的阻塞队列
1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。阻塞队列提供了四种处理方法:方法\...转载 2019-07-27 22:39:36 · 186 阅读 · 0 评论 -
Thread Local的原理与适用场景
Thread Local的原理与适用场景ThreadLocal解决什么问题ThreadLocal用法ThreadLocal原理ThreadLocal维护线程与实例的映射Thread维护ThreadLocal与实例的映射ThreadLocal 在 JDK 8 中的实现ThreadLocalMap与内存泄漏读取实例设置初始值设置实例防止内存泄漏适用场景案例总结ThreadLocal解决什么问题由于...转载 2019-07-31 10:52:10 · 188 阅读 · 0 评论 -
MySQL和Redis实现分布式锁
MySQL和Redis实现分布式锁1. 为何需要分布式锁2. 分布式锁的一些特点3. 常见的分布式锁4. Mysql实现分布式锁4.1 lock()4.2 tryLock()和tryLock(long timeout)4.3 unlock()4.4 锁超时4.5 MySQL实现方式小结4.6 乐观锁5. Redis实现分布式锁5.1 使用setnx实现5.2 使用Redission来实现5.3 R...原创 2019-07-24 18:50:05 · 2864 阅读 · 2 评论 -
基于Redis的分布式令牌桶限流器
本文根据GuavaRateLimiter令牌桶限流器修改的基于Redis的分布式限流器。令牌桶采用横定速率生成令牌存放入桶中,通过计算获取指定令牌数所需要的等待时间来进行限流。注:其中对于令牌桶的更新需要依赖分布式同步锁:DistributedLock本文采用基于Redis的RedLock来实现,请参见本人另外的一篇文章:MySQL和Redis实现分布式锁1. Guava RateLi...转载 2019-07-29 15:19:59 · 1642 阅读 · 0 评论 -
高并发场景下如何保证数据库和缓存的数据一致性
高并发场景下如何保证数据库和缓存的数据一致性分析经典做法分析只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题?经典做法最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。更新的时候,先删除缓存,然后更新数据库。...原创 2019-07-11 18:37:57 · 10731 阅读 · 4 评论 -
并发与并行的区别
如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某...原创 2019-07-13 16:24:48 · 227 阅读 · 0 评论 -
java常见的四种线程池
java常见的四种线程池1. FixedThreadPool2. CachedThreadPool3. SingleThreadExecutor4. ScheduledThreadPoolExecutors工厂类一共可以创建四种类型的线程池,通过Executors.newXXX即可创建。1. FixedThreadPoolpublic static ExecutorService newFi...原创 2019-07-13 09:41:02 · 569 阅读 · 0 评论 -
Synchronized实现原理
查看带有Synchronized语句块的class文件可以看到在同步代码块的起始位置插入了moniterenter指令,在同步代码块结束的位置插入了monitorexit指令。(JVM需要保证每一个monitorenter都有一个monitorexit与之相对应,但每个monitorexit不一定都有一个monitorenter)但是查看同步方法的class文件时,同步方法并没有通过指令moni...原创 2019-06-12 15:58:44 · 16283 阅读 · 9 评论