背景 最近在看同事的消息平台的问题进行优化,其中一点就是推送来的消息没有区分优先级,造成实时性要求高的不能优先满足,被全网下发的普通优先级占用了,造成消息延迟。 对应的改进一点就是采用把现有线程池改为优先级队列。 实现 …
分类:java并发
利用PriorityBlockingQueue实现线程池中带优先级的线程
转自https://www.chenx.tech/priority-blocking-queue/ 简单来说,方案一: public class Task implements Runnable, Comparable&…
14个Java并发容器,你用过几个?
前言 不考虑多线程并发的情况下,容器类一般使用 ArrayList、HashMap 等线程不安全的类,效率更高。在并发场景下,常会用到 ConcurrentHashMap、ArrayBlockingQueue 等线程安全…
高并发,如何提高并发量
一、什么是高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间(Response T…
缓存更新策略
先更新数据库再更新缓存 和 先更新缓存再更新数据库直接放弃,因为缓存有时候并不是数据库的直接数据,有可能是经过一系列计算得来的数据,如果更新缓存,代价太大 先删缓存再更新数据库: 问题:当线程A要更新数据,先把缓存删了,…
高并发,如何提高并发量
一、什么是高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 高并发相关常用的一些指标有响应时间(Response T…
Java线程的优先级
线程的优先级 线程优先级:getPriority() setPriority(int x) Java提供了一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度那个线程来执行。 线程的优…
C++并发编程中static变量的问题
在C++中,static表示的是“静态初始化”,由其声明的变量因此也叫作“静态变量”,他们从完成初始化后就一直存在于程序运行空间中(确切地说位于静态变量区),直至程序退出或销毁。 如果按照变量的作用域来划分,静态变量可以…
原子变量与非阻塞同步机制(第十五章)
原子变量与非阻塞同步机制 与基于锁的方案相比,非阻塞算法在设计和实现上都要负责得多,但它们在可伸缩性和活跃性上拥有巨大的优势。原子变量提供了与volatile类型变量相同的内存语义,此外还支持原子的更新操作,从而使它们更…
显式锁(第十三章)
显式锁 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java5.0增加了一种新的机制:ReentrantLock。ReentrantLock并不是一种替代内…
性能与可伸缩性(第十一章)
性能与可伸缩性 性能包括:服务时间、延迟时间、吞吐率、效率、容量等可伸缩性:当增加计算资源时(例如CPU、内存、存储容量或I/O带宽),程序的吞吐量或者处理能力能相应地增加 当进行性能调优时,其目的通常是用更小的代价完成…
避免活跃性危险(第十章)
避免活跃性危险 在安全性与活跃性之间通常存在着某种制衡,我们使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致“锁顺序死锁”。同样,我们使用线程池和信号量来限制对资源的使用,但这些被限制的行为可能会导致资源死锁…