浅析AbstractQueuedSynchronizer
最近算是闲来无事,再者就是,很早之前
在AQS的概念和设计层面-浅浅的挖呀挖呀挖
AQS,全称 Abstract Queued Synchronizer,是一个抽象的队列同步器,通过维护一个共享资源状态( Volatile Int State )和一个先进先出( FIFO )的线程等待队列来实现一个多线程访问共享资源的同步框架。
IO密集型服务提升性能的三种方法
在面对IO密集型系统性能优化时,我们可以通过三种主要的方式来进行:批处理、缓存和多线程。这三种方式各有其优点和适用场景。
HikariPool一直报连接不可用
前言一开始发现测试环境报错,原先配置6现在配置20依然还是很频繁的报错,想看下底层到底如何处理的导致这个问题,到底什么情况。
ThreadPoolExecutor的submit正确的使用方式
项目场景:线程池的地方用的还是挺多的,一般来说用的多的还是execute方法,submit方法还是用的挺少的,一般ThreadPoolExecutor 的 submit 方法通常用于将一个任务提交到线程池中执行。这个方法会返回一个 Future 对象,可以用来检查任务的执行状态,获取任务的返
从CPU的视角看 多线程代码为什么那么难写!
现代CPU的本质其实也是一个分布式系统,很多时候仍需要编程者手动去解决数据不一致性的问题
Java语言
Java的线程
本篇文章介绍了1. Java的线程生命周期;2. Java的线程状态切换;3. Java线程API的使用。
腾讯面试:如何优雅停止一个正在运行的线程?
前言停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要使用。虽然它可以达到停止线程的目的,但是这个方法是不安全的,已被废弃。
一文带你彻底理解同步和锁的本质
为了更好地从底层原理去了解锁的机制,形成体系化的知识,这篇文章我会从进程间通信底层原理说起,然后介绍一下Java中各种线程通信的实现机制,最后做一个系统的总结。
完了,CPU100%了
cpu使用率100%问题,是一个让人非常头疼的问题。因为出现这类问题的原因千奇百怪,最关键的是它不是必现的,有可能是系统运行了一段时间之后,在突然的某个时间点出现问题。
线程数量与执行效率的分析
在同一机器/操作系统上,使用n个线程处理X个任务是不是和使用n*m个线程处理X个任务效率相同?
自省|探讨线程间入门级协作的19个问题
在《并发之道:三大并发问题与 JMM 何干?》中,在讨论【编程语言如何解决并发问题】的话题时,有聊到编程语言面对并发的三大问题,它所做的是对多线程的通信、同步机制进行包装,为开发者提供使用轻便、功能丰富的多线程编程 API
面试官:如何排查死锁?
从易用性和性能方面来考虑,推荐使用 jconsole 或 jvisualvm 来排查死锁。
DCL单例模式是如何保证数据安全的?
承接上文证明CPU指令是乱序执行的。DCL单例(Double Check Lock)到底需不需要volatile?
单服务并发出票实践
一、背景 项目组上线集团客运站系统,该集团旗下六家客运站,每日出票量在1万~2万张左右(疫情期间票量下滑)。前期系统只能部署在一台单服务器上,应用程序与数据库(mysql)同服。 客运站出票业务有两大特点,一是出票渠道分散(人口窗口、自助设备、线上各分销渠道均支持出票);二是出票时间集中,全天出
多线程引发的惨案直接把年终给干没了
你好,我是坤哥前些日子我们线上出现了一个比较严重的故障,这个故障是多线程使用不当引起的,挺有代表性的,所以分享给大家,希望能帮大家避坑!问题描述先简单介绍一下问题产生的背景,我们有个返利业务,其中有个搜索场景,这个场景是用户在 app 输入搜索关键词,然后 server 会根据这个关键词到各个
虽然是我遇到的一个棘手的生产问题,但是我写出来之后,就是你的了。
这个案例就是一个纯技术的问题导致的,和业务的相关度其实并不大,所以你拿过去直接添油加醋,稍微改改,往自己的服务上套一下,那就是你的了。
JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来3 —— 本地缓存变身分布式集群缓存,打破本地缓存天花板
上一篇文章中,我们知晓了如何在项目中通过不同的方式来集成Ehcache并在业务逻辑中进行使用。作为JAVA本地缓存框架综合实力天花板级别的Ehcache,除了在本地缓存方面具有强悍的实力外,还具有一个其它对手所不具备的特色功能,即Ehcache提供了对于集群能力的支持,这也使得Ehcache不仅仅是
让人恶心的多线程代码,性能怎么优化!
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分
读懂HikariCP一百行代码,多线程就是个孙子!
通常,我在看书的时候一般不写代码,因为我的脑袋被设定成单线程的,一旦同时喂给它不同的信息,它就无法处理。但多线程对电脑来说就是小菜一碟,它可以同时做很多事,看起来匪夷所思。好希望把自己的大脑皮层移植到这些牛x的设备上。用人脑思考电脑正在思考的问题,这本身就是一种折磨。但平常的工作和面试中,又不得
单核 CPU 支持 Java 多线程吗?为什么?
由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。时间片多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同
【译】一个提升并发队列性能的专用算法
需要为您的队列创建多个写入线程和一个阅读线程吗?想要比java.util.concurrent.BlockingQueue更好的性能吗?试试这个
【译】在Java中创建了100万个线程以后
在我们深入研究创建一百万个线程之前,让我们看看Java线程的历史。自Java 1.0以来,Java线程一直存在,以便在Java应用程序中提供并发性。最初,它们被称为“绿色线程”,主要是完全由JVM管理的线程。这是因为在Java 1.0发布时,CPU大多是单核,当时的操作系统
夯实Java基础,一篇文章全解析线程问题
1. 线程是什么操作系统支持多个应用程序并发执行,每个应用程序至少对应一个进程 ,彼此之间的操作和数据不受干扰,彼此通信一般采用管道通信、消息队列、共享内存等方式。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程,提高了CPU利用率。有了进程,为什么还要线程?因为进程的成本太高了。启动
Java多线程:从基本概念到避坑指南
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。多核的机器,现在已经非常常见了。即使是一块手机,也都配备了强劲的多核处理器。通过多进程和多线程的手段,就可以让多个CPU同时工作,来加快任务的执行。多线程,是编程中一个比较高级的话题。由于它涉及到共享资源的操作,所以在
【译】关于Java 并发和多线程编程的几个常见概念
在这篇文章中,我们将讨论并发编程中几种常见概念:同步、竞争条件和死锁。
【译】处理阻塞调用的两种方法:线程并发与网络异步
有两种方法可以处理涉及阻塞操作的客户端请求,他们是线程并发和网络异步,并对他们做了一个对比。
【译】如何用Chronicle 的开源Pauser,平衡低延迟和CPU使用率?
通常在低延迟开发中,必须在最小化延迟和避免过度使用 CPU 之间进行权衡。本文探讨了如何使用Chronicle 的Pausers(一种开源产品)在没有要处理的数据时设置自动退避策略,从而在资源使用和响应式、低延迟、低抖动的应用程序之间取得平衡。问题描述在典型的应用程序堆栈中,多个线程用于服务
基于JDK源码解析Java领域中的并发锁,我们可以从中学习到什么内容?
写在开头在Java领域中, 尤其是在并发编程领域,对于多线程并发执行一直有两大核心问题:同步和互斥。其中:互斥(Mutual Exclusion):一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。即就是同一时刻只允许一个线程访问共享资源的问题。同步(Sy
不堆概念、换个角度聊多线程并发编程
大家好,又见面了。在上一篇文档《JAVA基
代码改成多线程,竟有9大问题
前言很多时候,我们为了提升接口的性能,会把之前单线程同步执行的代码,改成多线程异步执行。比如:查询用户信息接口,需要返回用户基本信息、积分信息、成长值信息,而用户、积分和成长值,需要调用不同的接口获取数据。如果查询用户信息接口,同步调用三个接口获取数据,会非常耗时。这就非常有必要把三个接口调
线程池,我是谁?我在哪儿?
大家好,这篇文章跟大家探讨下日常使用线程池的各种姿势,重点介绍怎么在 Spring 环境中正确使用线程池。线程池使用姿势首先问大家一个问题,你日常开发中是怎样使用线程池的?我想大致可以分为以下四种情况:1.方法级,随用随建,用完关闭2.类级共享,定义个 static final 修饰
喜提JDK的BUG一枚!多线程的情况下请谨慎使用这个类的stream遍历。
你好呀,我是歪歪。前段时间在 RocketMQ 的 ISSUE 里面冲浪的时候,看到一个 pr,虽说是在 RocketMQ 的地盘上发现的,但是这个玩意吧,其实和 RocketMQ 没有任何关系。纯纯的就是 JDK 的一个 BUG。我先问你一个问题:LinkedBlockingQueue 这
你一定要知道的保证线程安全的10个小技巧
大家好,我是苏三,又跟大家见面了。导语对于从事后端开发的同学来说,线程安全问题是我们每天都需要考虑的问题。线程安全问题通俗的讲:主要是在多线程的环境下,不同线程同时读和写公共资源(临界资源),导致的数据异常问题。比如:变量a=0,线程1给该变量+1,线程2也给该变量+1。此时,线程3获取a的值
记一次微服务间调用超时排查
任何问题的发生都会留下痕迹,追踪这些痕迹逐一排除。通过加减法排除一些可能的怀疑点,最终真相就会出现在眼前。
美团动态线程池实践思路开源框架(DynamicTp),监控及源码解析篇
动态线程池项目DynamicTp开源四个月,目前1k+star,说明还是比较受欢迎的,现在已经有一些小伙伴在接入使用或者即将接入使用了,为了项目以后更好的发展迭代,打算出几篇文章来对DynamicTp做一些更详细的介绍,有兴趣的小伙伴欢迎一起参与进来完善迭代项目。
动态线程池(DynamicTp)之动态调整Tomcat、Jetty、Undertow线程池参数篇
这篇文章我们来介绍下动态线程池框架(DynamicTp)的adapter模块,上篇文章也大概介绍过了,该模块主要是用来适配一些第三方组件的线程池管理,让第三方组件内置的线程池也能享受到动态参数调整,监控告警这些增强功能。
美团动态线程池实践思路开源项目(DynamicTp),线程池源码解析及通知告警篇
我们来聊下动态线程池开源项目(DynamicTp)的通知告警模块。目前项目提供以下通知告警功能,每一个通知项都可以独立配置是否开启、告警阈值、告警间隔时间、平台等,具体代码请看core模块notify包。
美团动态线程池实践思路,开源了
我们来聊一个比较实用的话题,动态可监控的线程池实践,全新开源项目(DynamicTp)地址在文章末尾,欢迎交流学习。
全网最硬核 Java 新内存模型解析与实验单篇版(不断更新QA中)
个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判。如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 issue,谢谢支持~本篇文章参考了大量文章,文档以及论文,但是这块东西真
硬核 - Java 随机数相关 API 的演进与思考(下)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算法,以及他们的设计思路是什么。本系列会分为两篇,第一篇讲述 Java 随机数算法的演变思路以
硬核 - Java 随机数相关 API 的演进与思考(上)
本系列将 Java 17 之前的随机数 API 以及 Java 17 之后的统一 API 都做了比较详细的说明,并且将随机数的特性以及实现思路也做了一些简单的分析,帮助大家明白为何会有这么多的随机数算法,以及他们的设计思路是什么。本系列会分为两篇,第一篇讲述 Java 随机数算法的演变思路以
Kafka 顺序消费线程模型的实践与优化
各类消息中间件对顺序消息实现的做法是将具有顺序性的一类消息发往相同的主题分区中,只需要将这类消息设置相同的 Key 即可,而 Kafka 会在任意时刻保证一个消费组同时只能有一个消费者监听消费,因此可
大碰撞!当Linux多线程遭遇Linux多进程
背景 本文是描述多进程多线程编程中遇到过的一个坑,并从内核角度分析其原理。这里说的多进程多线程并不是单一的多进程或多线程,而是多进程和多线程,往往会在写一个大型应用时才会用到多进程多线程的模型。这是怎
Linux多线程应用性能分析
如今CPU的核心数越来越多, 在2019年你可以轻易买到超过50个核心的x86服务器CPU,一个中端台式机拥有8个执行线程也没什么好奇怪的。问题是我们怎样找到工作负载来“喂饱”那些相对饥饿的核。到目前
多线程之CountDownLatch的用法及原理笔记
前言-CountDownLatch是什么?CountDownLatch是具有synchronized机制的一个工具,目的是让一个或者多个线程等待,直到其他线程的一系列操作完成。CountDownLat
一个线程罢工的诡异事件
背景事情(事故)是这样的,突然收到报警,线上某个应用里业务逻辑没有执行,导致的结果是数据库里的某些数据没有更新。虽然是前人写的代码,但作为 ```Bugmaker&killer``` 只能咬着牙上了。
记录一次Flink作业异常的排查过程
最近2周开始接手apache flink全链路监控数据的作业,包括指标统计,业务规则匹配等逻辑,计算结果实时写入elasticsearch. 昨天遇到生产环境有作业无法正常重启的问题,我负责对这个问题
实现线程的方式到底有几种?
这篇文章主要讲解实现线程的方式到底有几种?以及实现 Runnable 接口究竟比继承 Thread 类实现线程好在哪里?实现线程是并发编程中基础中的基础,因为我们必须要先实现多线程,才可以继续后续的一
今天,进程告诉我线程它它它它不想活了
上一篇文章我们解剖了进程和线程的本质,进程和线程的实现方式,这篇文章我们来探讨它们是如何通信的,进程告诉我说线程不想活了,我不管它死活,我只想知道我是谁?进程是怎么告诉我的?进程的出现和线程的死亡和我
Java多线程知识小抄集(一)
本文主要整理笔者遇到的Java多线程的相关知识点,适合速记,故命名为“小抄集”。本文没有特别重点,每一项针对一个多线程知识做一个概要性总结,也有一些会带一点例子,习题方便理解和记忆。 1.interr
Java多线程——并发测试
编写并发程序时候,可以采取和串行程序相同的编程方式。唯一的难点在于,并发程序存在不确定性,这种不确定性会令程序出错的地方远比串行程序多,出现的方式也没有固定规则。那么如何在测试中,尽可能的暴露出这些问
类初始化导致死锁
一张图简单描述死锁 如上图,Thread1 拿到了 object1,Thread2 拿到了 object2,但是现在 Thread1 需要拿到 object2 的锁才能继续往下,Thread2 又要拿到 object1 才能继续往下

有开始,就会有进​步!

在追求性能的道路上,记录每一刻的成长!源码解读,编程技巧,外文翻译,技术实践,线上案例等等,记录自己,启发他人!

专家作者推荐

巡山小汪

关注微信公众号《解Bug之路》,有问题请在公众号中咨询:) 无论多么艰苦的时刻,都不要忘记,辉煌的未来,在你的眼中闪耀!

飞哥开发内功

《深入理解Linux网络》作者,腾讯搜狗十年工程师,公众号「开发内功修炼」作者!

踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

Brand

搜索关注微信公众号【架构与思维】:撰稿者为bat、字节的几位高阶研发/架构,专注技术分享。

专题推荐

本系列文章主要针对Dubbo2.6.2(dubbox2.8.4)版本,从源码的角度分析Dubbo内部的实现细节,加深对Dubbo的各配置参数底层实现原理的理解,更好的指导Dubbo实践。
11篇文章14468阅读量
GC(Garbage Collection)很大程度上帮助Java程序员解决了内存释放的问题,有了GC,就不需要再手动的去控制内存的释放。
12篇文章30275阅读量