![](https://img-blog.csdnimg.cn/dee858a9f8054b3aa5193616c5852f0e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 90
并发编程
Java程序员廖志伟
我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主等头衔。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、容器编排Kubernetes等。
展开
-
关于Linux服务器高并发场景下系统参数优化的诸多奇技淫巧
🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文专业写手、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、🚀徒步爬过衡山、🔥有过三个月减肥20斤的经历、是个喜欢躺平的狠人。原创 2023-11-28 16:09:25 · 952 阅读 · 0 评论 -
AbstractQueuedSynchronizer之AQS
(简称AQS)是Java中锁和同步器的基础框架,大多数的锁和同步器都是通过继承AQS来实现的。AQS提供了一个灵活的框架,使得开发者可以根据自己的需求来实现各种锁和同步器。本文将介绍AQS的基本原理和实现细节。原创 2023-09-08 17:30:00 · 120 阅读 · 0 评论 -
ReentrantLock、ReentrantReadWriteLock、StampedLock讲解
在多线程编程中,锁是必不可少的,因为许多并发问题都可以通过加锁来解决,例如线程安全的单例实现、线程安全的数据结构实现等等。Java提供了许多类型的锁,本文就来介绍其中三种常见的锁:ReentrantLock、ReentrantReadWriteLock、StampedLock。ReentrantLock是一种可重入锁,提供了公平锁和非公平锁、可中断获取锁和条件变量等特性,使用起来比较灵活,但也比较复杂,需要手动控制加锁和释放锁的过程。原创 2023-09-05 18:00:00 · 237 阅读 · 0 评论 -
LockSupport与线程中断
LockSupport是由Doug Lea等人在Java 1.6中引入的一种线程同步工具,它可以阻塞和唤醒线程,并且不需要使用任何锁。它是Java中最基本的线程同步原语之一,也是实现Lock和其他锁的基础。LockSupport通过让线程等待许可证而阻塞线程,许可证可以被其他线程释放。如果许可证在没有发放给线程的情况下被请求,那么该线程将一直阻塞。park()方法用于阻塞当前线程,直到unpark()被调用或中断事件发生。如果线程在调用park()之前被中断,那么它会立即返回。原创 2023-09-05 17:30:00 · 85 阅读 · 0 评论 -
Reactor模型深度解析
Reactor模型是一种高并发IO编程模型,它的主要目的是简化IO编程的复杂性,可以让我们把精力集中在业务逻辑上。Reactor模型的核心是事件循环(Event Loop),通过事件循环,我们可以实现一种无阻塞的IO编程方式。Reactor模型的基本结构如下图所示:Event Loop:事件循环,负责监听各种IO事件,如可读、可写和错误事件等,一旦有事件发生,它就会调用相应的回调函数处理事件。原创 2023-09-08 09:15:00 · 378 阅读 · 0 评论 -
【实现每秒1,000,000个请求的秒杀接口】
数据库连接池技术是一种常用的优化数据库访问的方法,它通过预先创建一定数量的数据库连接并保存在连接池中,等待应用程序请求连接时直接从连接池中获取可用的连接,从而避免了每次请求都需要重新创建连接的开销,提高了数据库操作的效率。这样做可以实现系统的横向扩展,增加系统的承载能力。同时,在Java应用程序开发中,也要重视安全问题,采用安全的编码规范和工具,保证应用程序的安全性。监控系统运行情况:使用工具收集应用程序的运行指标(如CPU使用率,内存使用情况,GC情况等),以及请求的响应时间,吞吐量,错误率等。原创 2023-06-22 08:25:19 · 443 阅读 · 0 评论 -
【无锁并发框架Disruptor】
首先需要定义要在Disruptor中传输的数据对象,称为Event。Event可以有任意的数据结构,只要满足业务需求即可。Disruptor的数据处理逻辑,即Event处理器,需要实现EventHandler接口。EventHandler中只有一个onEvent方法,用于处理Event。Event处理器需要在Disruptor启动之前创建并注册。原创 2023-06-16 08:15:00 · 1530 阅读 · 0 评论 -
【Future&ForkJoin框架原理】
在上面的示例中,我们创建了一个有10万个元素的整数数组,然后创建了一个SumTask,该任务用于计算数组中所有元素的和。在上面的示例中,我们创建了一个ExecutorService,然后提交了一个Callable任务,该任务会休眠3秒钟,然后返回整数100。ForkJoin框架通过将大任务拆分为小任务,然后在不同的线程中并行执行这些小任务,最终将所有的小任务结果合并得到最终结果。在我们的故事中,每个工人都在记录自己的进度,这就是Future的关键:每个线程都可以记录自己的进度并返回自己的结果给主线程。原创 2023-06-15 08:15:00 · 407 阅读 · 0 评论 -
【阻塞队列BlockingQueue&非阻塞队列ConcurrentLinkedQueue&同步队列SyncQueue】
这就是同步队列的工作原理,每个住户都可以把自己的垃圾袋放到队列中,但是只有运输车到达时,才能从队列中取出垃圾袋进行处理。这就是阻塞队列的工作原理,当队列满了或者空了,生产者和消费者线程会被阻塞等待,直到队列中有可用的元素或者有空位。阻塞队列是一种数据结构,它具有线程安全性,可以用于多线程环境中的生产者消费者模式,其中生产者将消息插入队列,消费者将消息从队列中删除并处理。同步队列是一种特殊的队列,它可以用于线程间的手递手操作,其中每个线程都必须等待其他线程完成它们的操作,然后才能继续执行。原创 2023-06-14 08:15:00 · 454 阅读 · 0 评论 -
【深入理解同步器AQS】
通过上述分析,我们可以发现,AQS是Java中用于实现同步器的一个重要框架。借助AQS,我们可以方便地实现各种同步工具,如ReentrantLock、Semaphore、CountDownLatch等,为并发编程提供了强有力的支持。原创 2023-06-13 08:15:00 · 684 阅读 · 0 评论 -
【Lock锁的使用与原理】
Lock锁是Java Concurrency API中的重要机制,它提供了更为灵活和强大的同步控制能力,并支持可重入锁、公平锁等特性。Lock锁的核心原理是基于AQS框架实现的,它通过操作系统提供的原语来控制锁的获取和释放,从而实现线程同步。在使用Lock锁时需要小心谨慎,以免出现死锁和其他同步问题。原创 2023-06-17 16:45:00 · 1771 阅读 · 0 评论 -
【 Executor线程池原理与源码】
Executor框架提供了一种方便的方式来执行异步任务,它可以避免线程创建和管理的复杂性,并提高系统的性能和效率。在使用Executor框架时,我们需要了解其原理和使用方法,并根据实际需求选择合适的线程池类型和参数。原创 2023-06-16 12:30:00 · 191 阅读 · 0 评论 -
【CompareAndSwap底层原理】
为了避免被发现,小偷想到了一个方法:他观察了一会儿密码锁的操作,发现每次输入密码之后,密码锁会将输入的数字与一个内部的计数器相加,然后将相加的结果存储在一个内部变量中。小偷再次来到密码锁前,输入了一组错误的密码,密码锁将输入的数字与计数器相加之后,存储在了内部变量中,但是这时存储的结果已经不正确了,因为小偷已经改变了计数器的值。CompareAndSwap(CAS)是一种并发编程中的操作,它可以判断一个变量的当前值是否与预期值相同,如果相同,就将该变量的值设置为新值。在该示例中,我们使用了Java提供的。原创 2023-06-15 12:30:00 · 285 阅读 · 0 评论