在java web项目开发者,最难解决的是高并发问题,我为搞并发解决方案,想出了一个解决方案。 a.应用层面:读写分离、缓存、队列、集群、令牌、系统拆分、隔离、系统升级(可水平扩容方向)。 b.时间换空间:降低单次请求时间,这样在单位时间内系统并发就会提升。
转载
2023-12-12 21:38:31
55阅读
1. 并发编程介绍1.1 并发的出现单CPU时代,单任务在一个时间点只能执行单一程序。多任务阶段,计算机能在同一时间点并行执行多进程。多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。现代的计算机多核CPU,在一个程序内部能拥有多个线程并行执行,多个CPU同时执行该程序。一个进程就包括了多个线程,每个线程负责一个独立的子任务。
转载
2024-06-22 10:20:11
11阅读
I CountDownLatch 使用场景举例II CountDownLatch 简单线程阻塞示例III CountDownLatch 多个线程联合阻塞示例
原创
2022-03-09 10:40:29
147阅读
笔者使用jmeter做压测发现,并发使用200线程(5秒全部启动)时就会出现不少错误,为了解决这个问题做了一番优化,一下是优化后的总结经验。增加MySQL的最大连接数MySQL 5.7的默认最大连接数为151,如果要增加该值,需在数据库配置文件*.cnf里增加如下设置项,重启容器服务即可[mysqld]
max_connections=500 增加.Net C
转载
2023-09-12 15:34:05
100阅读
引言之所以我想总结一下java中不太用的东西,是因为我再研究每个版本jdk中,发现有些内容“热火朝天”,但是有些东西却“门可罗雀”。比如说jdk1.5中新增了泛型,强化for循环和枚举等,但是前两者已经被各位熟知了,但是枚举在日常开发中都不太会用的。在本篇博文中,我会详细介绍enum的使用方式,同时比较常量与enum的优劣。笔者目前整理的一些blog针对面试都是超高频出现的。技术点在jdk1.5中
转载
2023-08-11 11:03:19
0阅读
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,RabbitMQ是什么、RabbitMQ核心概念、常用交换器类型、RabbitMQ服务器安装等基础,这里就不重复讲解了。这里主要介绍一下MQ的应用场景和SpringBoot整合RabbitMQ的快速开发MQ典型应用场景RabbitMQ特点消费端幂等性保障
转载
2024-06-19 04:58:00
67阅读
背景回顾一下《Java并发编程实战》这个专栏,温度而知新。由于专栏内容较多,本文知识专栏的简单介绍和回顾。对了每节课下面的评论也是不错的。课程目的帮助那些掌握了Java业务开发能力的基础,每天苦于CURD但希望能够实现技术进阶的人。Java的并发是区分一个java工程师段位的不错的方法,所以不少大厂都会偏向拥有相关能力的人,实际上这些大厂工作也是95%跟并发没关系,但就怕那5%你不会,把事情搞砸了
Java多线程与并发库同步方式import javax.xml.stream.events.StartDocument;
public class TestSynchronized {
public static void main(String[] args) {
// TODO Auto-generated method stub
TestSynch
转载
2024-01-15 01:04:01
30阅读
DelayQueue 简介由优先级堆支持的、基于时间的调度队列,内部基于无界队列PriorityQueue实现,而无界队列基于数组的扩容实现。队列创建BlockingQueue<String> blockingQueue = new DelayQueue();要求入队的对象必须要实现Delayed接口,而Delayed集成自Comparable接口应用场景对缓存超时的数据进行移除当向缓
转载
2023-08-11 20:12:19
134阅读
当 select 中的其它分支都没有准备好时,default 分支就会执行。
原创
2022-11-19 05:03:24
141阅读
高性能假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作查询mysql,半天查出来一个结果,耗时600ms。但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用户。那么此时咋办?缓存啊,折腾600ms查出来的结果,扔缓存里,一个key对应一个value,下次再有人查同样的数据,别走mysql折腾600ms了。直接从缓存里取出,通过一个key查出来一个value
转载
2023-07-10 10:16:31
155阅读
本课时主要介绍 ThreadLocal 适合用在哪些实际生产的场景中。我们在学习一个工具之前,首先应该知道这个工具的作用,能带来哪些好处,而不是一上来就闷头进入工具的 API、用法等,否则就算我们把某个工具的用法学会了,也不知道应该在什么场景下使用。所以,我们先来看看究竟哪些场景下需要用到 ThreadLocal。在通常的业务开发中,ThreadLocal 有 两种典型的 使用场景。场景1,Thr
转载
2024-02-28 13:08:24
51阅读
一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁对象。池的用户可以从池子中取得对象,对其进行操作处理,并在不需要时归还给池子而非直接销毁它。这是一种特殊的工厂对象。优点复用池中对象,消除创建对象、回收对象 所产生的内存开销、cpu开销以及(若跨网络)产生的网络开销。常见的使用对象池有:在使用socket时(包括各种连接池)、线程、数据库连接池等。缺点现在Java的对象分配
转载
2024-04-18 21:30:37
146阅读
简介信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对
第三章关于对象共享java并发实战第三章主要讲述关于对象共享的问题如下:一.失效数据:失效数据可能不会同时出现:一个线程可能获取一个新值另一个线程可能获得一个已经失效的值。失效数据可能导致活跃性问题和安全性问题为了解决失效数据我们可以对变量的get和set方法进行同步。二.最低安全性:线程没有同步的情况下读取变量,可能得到一个失效值,但是这个值可以使有之前某个线程设置的值,这样的安全保证被称为最低
转载
2023-09-28 11:13:25
37阅读
概述Redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value(字典, Remote Dictionary Server,远程字典服务器)数据库。.NET开发程序配置ServiceStack.Common.dllServiceStack.Interfaces.dllServiceStack.Redis.dllServiceSta
转载
2023-09-28 17:51:23
194阅读
为什么要有Spark SQL? 以往在使用Hadoop时,Hive作为一个数据仓库,但在使用中,我们更多感觉Hive是一个解析引擎,而Hive的底层走的也是MapReduce,而这个MapReduce是Hadoop的,在前面我们也解释了Hadoop的MapReduce的缺点,那么此时我们是使用了Spark实现的MapReduce计算模型,
转载
2023-09-10 19:41:55
237阅读
《dubbo应用场景示例一》中我们介绍了3种dubbo应用场景,今天我们接着聊聊dubbo几种应用场景。1、线程模型如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。如果
转载
2023-07-18 17:05:44
223阅读
作者述:JUC是对Java体系内现有数据结构的特性扩展,通过精细化锁控制,和对基本数据类型的特性加工用以支持并发应用场景的业务需求,并提供了并发情况下的池化解决方案。有基础的同学可以直接跳到第四节内容.一、Collections工具类在学习JUC之前我们应当了解一下Collections工具类,该类应用工厂模式及装饰者模式为已有数据结构进行加工,赋予dynamically(checked) 、em
转载
2024-06-06 10:39:47
783阅读
关于java中的HashMap,我们在项目中经常使用到,但是我们的场景是否使用对了呢? 下面分为四个部分来阐述我的HashMap的理解 1、为什么要使用hashMap? 在项目中,需求的实现需要使用到一些数据结构来保存key-value形式的数据,也就是说hashMap其实就是一个装载数据的容器。例如,我需要查询水果的价格,那么很自然就会想到将这些数据存放在一个hashMap里面,苹果:
转载
2023-07-12 13:10:00
197阅读