![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 76
沛哥儿
互联网电商行业十余年技术老炮。
展开
-
Arrays.asList() 与 Collections.singletonList()的恩怨情仇
我们总结一下Arrays.asList()方法和Collections.singletonList()方法的特点。结构性变化不允许不允许非结构性变化允许不允许数据结构由数组支持直接握住元件在这篇文章中,我们讨论了Arrays.asList()方法和Collections.singletonList()方法。当我们想要初始化一个只有一个元素的固定大小列表时,我们可以考虑使用Collections.singletonList()方法。原创 2023-11-25 09:31:41 · 1272 阅读 · 0 评论 -
@CreateCache:深度解析其功能与优势
通过文章,我们对@CreateCache注解进行了全面的介绍和讨论。我们深入了解了该注解的特性、使用方法和常见的应用场景。我们还分析了其源代码以及在缓存管理方面的作用。最后,我们总结了使用该注解时需要注意的要点和最佳实践。通过使用@CreateCache注解,开发人员可以更轻松地利用缓存来提高应用程序的性能和响应速度。然而,合理配置和使用缓存仍然是一个复杂的任务,需要根据具体的业务需求来进行细致的调整。希望本文对你理解和使用@CreateCache注解提供了一些有益的参考和指导。原创 2023-11-10 13:53:00 · 639 阅读 · 0 评论 -
Synchronized classes “Vector“, “Hashtable“, “Stack“ and “StringBuffer“ should not be used
在使用代码扫描的时候,sonar进行了预警。原创 2023-10-31 15:02:49 · 318 阅读 · 0 评论 -
Dynamic-TP入门初探
Dynamic-tp是美团开源的一个基于配置中心的轻量级动态可监控线程池中间件,通过它可以很轻松的配置和监控线程的相关信息。接入相对比较简单,使用起来也比较方便,需要调优的时候,直接修改nacos配置文件,然后重新发布即可。原创 2023-09-12 20:30:00 · 516 阅读 · 0 评论 -
Java实战:高效提取PDF文件指定坐标的文本内容
临时接到一个紧急需要处理的事项。业务侧一个同事有几千个PDF文件需要整理:需要从文件中的指定位置获取对应的编号和地址。要的急,工作量大。所以就问到技术部有没有好的解决方案。问技术的话就只能写个demo跑下了。原创 2023-08-09 16:11:32 · 6643 阅读 · 7 评论 -
浅析Java 多线程中的锁
补充一点,在使用锁时,我们也应该注意锁的粒度和锁定顺序。锁的粒度越小,锁定的时间就越短,竞争的线程就越少,从而提高并发效率。同时,锁的锁定顺序也会影响并发效率。当多个线程都需要获取多个锁时,如果锁定顺序不同,就可能出现死锁问题。因此,我们需要遵循一定的锁定顺序,尽可能减少死锁的出现。Java 中的锁机制是保证并发访问安全的重要工具。本文详细介绍了 Java 中的锁类型、锁的实现方法、锁的应用场景,以及锁的缺陷和解决方法。在使用锁时,我们需要根据实际的业务场景和运行环境,选择恰当的锁类型和实现方式。原创 2023-05-27 17:53:16 · 2521 阅读 · 1 评论 -
ConcurrentHashMap的实现原理是分段锁?你Out了
新版的ConcurrentHashMap和Segment分段锁没有任何关系。它的实现方式和HashMap有点大同小异:数组+链表+红黑树。原创 2022-11-21 21:24:57 · 1805 阅读 · 0 评论 -
并发编程线程基础知识:守护线程
守护线程–也称“服务线程”,它是后台线程,在没有用户线程可服务时会自动离开。原创 2022-11-20 23:45:00 · 630 阅读 · 0 评论 -
线程生命周期?其实就这么点东西
一大兄弟去一家公司面试,面试官问你能简单讲下并发编程中,你用过多线程不?你能简单讲下对线程的生命周期么?线程的生命周期?其实就这点点东西。原创 2022-11-18 16:41:03 · 127 阅读 · 0 评论 -
解决了这些问题,网站想出问题都难!!
网站中的故障有部分是客观问题,需要对应的编程老师傅(踩过坑)的带领下,根据实际情况来估算;还有一部分是因为团队习惯等问题,这个需要团队制定良好的规范和流程来避免(编程不规范,新人两行泪)。作为一名合格的技术管理者或者技术专家,应该在团队中定义好对应的技术研发规范和流程,以来预防一些常见的问题。原创 2022-10-18 20:22:53 · 465 阅读 · 0 评论 -
Dockerfile常用命令
命令用途示例FROM来源于哪个基础镜像哪个tagMAINTAINER作者信息zhangsanRUN容器构建时需要运行的命令:支持两种格式 shell: yum isntall -y vimexec: [“可执行文件”,“参数”]EXPOSE对外暴露端口EXPOSE 80WORKDIR容器创建后,终端默认登录进来的工作目录USER指定该镜像以什么用户去执行 默认为rootUSER adminENV运行时环境变量VOLUME配置容器数据卷挂载ADD。原创 2022-09-26 23:36:48 · 3392 阅读 · 0 评论 -
JMM底层之happnes-before原则
其实就是Java内存模型中定义的两项操作之间的排序关系,如果操作A happens-before操作B,就是在说发生在B之前的操作A产生的影响能被B观察到。下面的例子简单的说明如果存在先行关系,就不用担心指令重排对两个线程的影响,不存在先行关系就要特别小心了:以下操作在线程A中执行i=1;以下操作在线程B中执行j=i;以下操作在线程C中执行i=2;1 是根据happnes-before原则,“i=1” 的结果可以被观察到;原创 2022-09-07 10:04:22 · 598 阅读 · 0 评论 -
Go语言的CSP模型
go语言的最大两个亮点,一个是goroutine,一个就是chan了。二者合体的典型应用CSP,基本就是大家认可的并行开发神器,简化了并行程序的开发难度,我们来看一下CSP。Golang 的 channel 将 goroutine 隔离开,并发编程的时候可以将注意力放在 channel 上。在一定程度上,这个和消息队列的解耦功能还是挺像的。如果大家感兴趣,还是来看看 channel 的源码吧,对于更深入地理解 channel 还是挺有用的。转载 2022-09-01 23:16:50 · 1295 阅读 · 0 评论 -
JVM参数之ParallelGCThreads
有个项目毫无征兆的停了,这个项目刚开始停过一次,是因为内存设置的不够大(使用的默认大小)。后台就使用网上的调优模式,将内存大小扩大了一倍。但是还是挂掉了一次。这个项目访问人数比较少,所以理论上来讲应该不会有那种高并发等类似的情况存在。但是要去找对应的问题,那就只能查看错误日志了。...原创 2022-07-18 00:15:40 · 2303 阅读 · 0 评论 -
knife4j aggregation 2.0.9支持路由文档自动刷新
相对2.0.8版本,2.0.9新版增加了以下功能:聚合组件aggregation1、聚合组件针对Cloud模式转发HTTP请求时,请求头重复导致转发失败的问题Gitee #PR39(opens new window)2、aggregation聚合组件增加order属性,方便开发者排序设置聚合OpenAPI文档的顺序Gitee #I27ST2(opens new window)3、aggregation聚合组件Nacos聚合微服务文档支持Nacos用户名及密码访问OpenAPI接口Gitee原创 2022-06-13 00:05:59 · 810 阅读 · 0 评论 -
SpringCloudAlibaba2021 网关访问错误解决
现在Spring好像做的越来越精细化了,将包拆的越来越小。所以很多原来的包都进行了拆分,功能就变得越来越细,项目就没有那么重了,选择会更加的灵活原创 2022-06-10 14:51:41 · 5117 阅读 · 1 评论 -
CloudAlibaba下报Failed to start bean ‘webServerStartStop‘; nested exception is java.lang.reflect异常解决
初次看到错误信息,不知道从何下手。跟踪日志,发现多次出现了nacos的身影。猜想可能是没有配置中心文件导致的问题。然后试着在nacos的配置中心中,配置了对应DataId的配置文件。然后重启下服务,发现服务居然好了。只想说,问题出现的莫名其妙,解决的也莫名其妙。...原创 2022-06-07 16:57:44 · 2216 阅读 · 0 评论 -
解决Java异步场景下丢失线程上下文的方法
Nepxion Discovery Agent 号称能解决一切JAVA异步场景下上下文丢失的情况。Discovery【探索】微服务框架,基于Spring Cloud & Spring Cloud Alibaba,Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用、Spring Cloud Gateway和Zuul过滤等组件全方位增强的企业级微服务开源解决方案,更贴近企业级需求,更具有企业级的插件引入、开箱即用特征原创 2022-05-31 20:06:24 · 2357 阅读 · 0 评论 -
SaTokenException: 非Web上下文无法获取Request问题解决
因为异步的原因,他会丢掉ThreadLocal中原来线程的数据,从而获取不到loginUser,这种情况下我们可以在方法内的局部变量中先保存原来线程的信息,在异步编排的新线程中拿着局部变量的值重新设置到新线程中即可。原创 2022-05-31 16:55:32 · 8689 阅读 · 1 评论 -
解锁Future新姿势:CompletableFuture初探
CompletableFuture作用官方解释CompletableFuture可以显式完成(设置其值和状态),并且可以用作 aCompletionStage,支持在完成时触发的相关功能和动作。当两个或多个线程尝试complete、completeExceptionally或cancelCompletableFuture 时,只有其中一个成功。除了这些以及直接操作状态和结果的相关方法之外,CompletableFuture 还实现CompletionStage了与以下策略的接口:...原创 2022-05-29 23:52:38 · 280 阅读 · 0 评论 -
Stream分组掌握这个你代码可以少些一半了
开发效能代码写的多,中间容易出差错。同时写的多的话,后续维护也比较麻烦,特别是嵌套里面的逻辑比较傲娇的那种。代码可读性如果是常规的统计的话,我们需要将所有的数据拿出来,然后使用循环一行行的匹配。这样可读性比较糙,使用map的方式一目了然。代码性能用for循环的话,走的是O(n)的方式。用map,使用的是O(1)。所以是没有可比性的。同时,如果你遇到那种假程序员,往里面嵌套读取数据库,那就是一场人间灾难了。原创 2022-05-26 16:55:38 · 395 阅读 · 0 评论 -
fastjson漏洞修复:开启safeMode来禁用autoType
Fastjson官方再次披露严重漏洞,包括rocketmq、jeecg-boot等近15%的github开源项目受影响2022年5月23日,fastjson 官方发布安全通报,fastjson <= 1.2.80 存在反序列化任意代码执行漏洞,在特定条件下可绕过默认autoType关闭限制,可能会导致远程服务器被攻击,风险影响较大。原创 2022-05-26 09:42:49 · 6660 阅读 · 0 评论 -
解决Java运行时错误For input string:问题
其实问题都比较简单,只要你多花点功夫去研究原理。你发现其实都差不多的。没有什么东西是很难的原创 2022-05-25 20:30:00 · 35108 阅读 · 1 评论 -
解决org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 问题
consider using 'getBeanNamesForType' with the 'allowEagerInit' flag turned off出问题了,最快的办法是把出问题之前和出之后的对比下,先找到问题解决它,工作上能力很重要,但是老板看重的是你解决问题的能力。2、要想同样的问题不重复,就有一定的必要去深究背后的问题:包括是什么原因导致的问题产生;中间解决的思路是什么(有哪些解决方案,哪个最优);后续的话在此处要避免哪些和此类似的坑,以免后人复哀后人的情况存在。原创 2022-05-23 23:32:13 · 58724 阅读 · 2 评论 -
@Validated注解对应类型(二)
@Validated注解对应类型(一)接上篇@Negative负数校验。校验的值一定得是负数。必须是严格的负数(即,0 被视为无效值)。支持的类型有:BigDecimal BigInteger byte,short,int,long,float,double和它们各自的包装器 包含null值@NegativeOrZero负数和零值校验上面的条件下增加0。其他和上面的一样。@NotBlank非null非空(包含空白字符)校验。数据不能是n...原创 2022-05-22 23:34:42 · 1188 阅读 · 0 评论 -
ThreadLocal精进篇:子线程类InheritableThreadLocal
ThreadLocal可以保证在当前运行线程中的变量不被其他并发下的线程共享。但是如果在代码中需要使用多线程呢?ThreadLocal是否该如何保证相关子线程下的数据的传递安全性呢?InheritableThreadLocal给我们提供了一丝可能。InheritableThreadLocalInheritableThreadLocal源码先简单瞄下源码package java.lang;import java.lang.ref.*;public class Inher..原创 2022-05-22 23:06:38 · 922 阅读 · 0 评论 -
分组:Stream不得不知的操作
groupingBy在分类操作的时候非常有用,我们可以直接将数据分好组。在后续需要调用的时候,直接get就好,就不需要进行二次计算操作了。在执行速度和代码可读性方面都有不错的提升。原创 2022-05-22 20:19:11 · 291 阅读 · 0 评论 -
IDEA编译:“错误: 找不到符号”问题解决
正常来讲,注解是不能在编译中发现的。注解是运行时动态去识别的。只有在运行的时候才会被触发。编译是不能识别的。那么@Builder为什么能够识别呢?那是因为,它是用来辅助编译的,它编译完成之后,代码里面有Builder模式的代码了。不信的话你可以找下对应的class文件看看。原创 2022-05-19 10:49:14 · 7326 阅读 · 1 评论 -
@Validated注解对应类型(一)
背景今天在entity的属性上,添加@NotEmpty属性的时候失败了。@NotEmpty这个很好理解,就是非空校验。查看了下,发现说是因为字段类型是Integer,不支持。但是这玩意放在属性上面,在运行时才去检查当前类型。这也确实有点扯蛋了。所以就弄点时间简单看下。@Validated简介@Validated是Spring Validator校验机制使用的。作用域一般就是解放我们原来对入参的校验操作,免得我们在代码里面写所以就花点时间,把源码都看了下,发现还..原创 2022-05-18 23:26:13 · 1361 阅读 · 1 评论 -
解决JSON parse error: Cannot deserialize instance of `java.lang.Integer` out of VALUE_TRUE token; nest
前端联调的时候,不小心出错了。错误信息如下JSON parse error: Cannot deserialize instance of `java.lang.Integer` out of VALUE_TRUE token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.Integer`..原创 2022-05-18 18:28:38 · 8791 阅读 · 1 评论 -
了解@Builder看了这篇文章就够了
添加@Builder注解,一般情况下,@NoArgsConstructor和@AllArgsConstructor都是成对出现的。如果要想设置默认值的话,就必须在属性字段上增加@Builder.Default注解,以方便new对象的时候,加入默认值。原创 2022-05-14 00:58:43 · 6226 阅读 · 2 评论 -
ThreadLocal入门,看完这个应该差不多了
ThreadLocal从字面上来理解,就是线程本地变量。因为它只对线程本身有效,所以在今天这种大谈特谈多线程的并发编程的情况下,来讨论ThreadLocal,我觉得怎么也不过分。ThreadLocal基本原理先看下多线程下的JVM模型主内存中存储的变量为进程共享变量。在堆(Heap)中的变量在被线程使用的时候会复制一个变量到副本线程的本地内存中,当进程中的变量被改变之后,都会通过JMM(Java内存模型)回传写入到主内存中,这样的情...原创 2022-05-13 00:55:41 · 667 阅读 · 0 评论 -
Mybatis-plus批量插入,并返回主键id
MP一时用一时爽 ,一直用一直爽。谁用谁知道,这个都快成为常识性的问题了。MP中的常用的CURD都给封装好了,直接调用就可以了。但是我们有的时候会遇到这样的问题,在保存之后,需要将当前新增的数据当作其它对象的一个属性存入进去,例如中间关联表。这个时候有的同学就觉得悲剧了。其实不用担心这个问题,MP已经帮我们想到了在插入的时候会把ID返回的。直接会返回赋值给当前实体类的。那么既然这样,批量saveBatch是不是也会返回呢?这是当然的啦,你能想到的一般性的问题,MP都处理好..原创 2022-05-09 09:16:47 · 13683 阅读 · 18 评论 -
easyexcel Excel表格数据读取数据为null问题解决
easyExcel是根据实体注解一个个去映射的,这里没有对注解进行非空null的判断,所以如果你的实体注解(@ExcelProperty)的属性在Excel表里面没有对应名字的列,那么就会返回null了。问题找到了,解决问题就简单了。把Excel中没有的列的注解给删除了,或者在Excel中添加对应名称的空列。这个问题就解决了。原创 2022-05-07 09:53:43 · 13116 阅读 · 0 评论 -
Java List单例表: Collections::singletonList VS List::of
在Java中,怎样将一个类型T的单个对象,转换为一单例的List<T>?一种最简单的方法,创建并实例化为一个ArraList或者LinkedList的对象。然后把它Add进去。但是,你会发现这种做法缺少了编码的乐趣,让人感觉没有追求。像我们这种有悟性的研发,就应该想着怎么用一行代码来搞定它。好消息是JavaSE提供了多个一行代码来解决这个问题的方法。在这里,我们不讨论那种匿名函数的双括号的实现方式。因为看起来是使用了一行代码来创建和添加单个对象。但是它实际上是两行代码:一行来实例化List的子类翻译 2022-04-27 15:54:18 · 1496 阅读 · 0 评论 -
JAVA接口设计篇:这些都不知道,别说你懂接口设计
1、接口清晰,调用端看得懂,后面自己人修改也不麻烦;2、外面的坏人很多,最好的办法是自己保护好自己,也就是说鲁棒性要杠杠的;3、捡芝麻,也不要丢西瓜。修改接口不是重建,而是糊裱匠,顶级的糊裱匠,那是李合肥那种级别的,劝你就别想了,一般人也做不来。原创 2022-04-25 12:34:40 · 5660 阅读 · 1 评论 -
解决Spring 异常:defined in BeanDefinition defined in class path resource [XXX], could not be registered.
背景因为项目越来越臃肿,需要对项目进行拆包处理。问题在拆完包后,发现报了个“defined in BeanDefinition defined in class path resource [XXX], could not be registered. A bean with that name has already been defined in class path resource”的错误。这个错误的意思就是当前名称的bean已经注册了。因为有些公共的包里面有对应的一些bean。..原创 2022-04-20 14:18:56 · 3975 阅读 · 0 评论 -
批量移除匹配的List对象
背景所有的代码功能实现都是对业务需求的实现,脱离业务的展示肌肉方式不可行。最近有个业务需求,因为B业务的数据来源于C表和D表。因为B中把C和D的ID存放到了一个字段,然后加了个类型字段进行了区分。当C表和D表的数据删除后,B表的数据需要同步进行删除操作。思路1、最简单的方法。直接在C表和D表的相关Service实现中,在删除的方法中增加对应的删除B业务的数据代码就可以了。总结简单、粗暴、高效(在开发的角度上来看),但是代码侵入性较大,后期维护拆分的时候有点痛苦。2、使..原创 2022-03-04 15:37:18 · 1256 阅读 · 0 评论 -
mysql 如何判断 “字符串“ 是否为 “数字“
{str} REGEXP {pattern}{str} 代表匹配的字符。{pattern}代表匹配的模式返回结果,如果匹配成功,则返回true,否则返回false。原创 2022-02-17 18:18:24 · 2001 阅读 · 0 评论 -
Spring MVC的@RequestMapping多URL映射实现
修改背景项目在执行一半的时候,因为架构调整,需要对整个目录都进行调整,按照拆分,原有的mvc的映射路径需要批量修改。考虑到项目已经是上线状态,需要同时兼容在线和开发版本。解决方法因为使用的是springMVC。所以不可避免的会用到RequestMapping注解字段。如果要修改的话有两种方案:1、所有的新的都走新的URL,所有都重新创建一个Controller,然后实现的话跳转到原有的里面去。这种方案的话修改量太大,而且存在一些不可控的风险。2、研究RequestMapping。..原创 2021-12-10 12:10:29 · 3592 阅读 · 2 评论