Fork me on GitHub
摘要: 前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入、MyBatis Plus 批量插入、MyBatis 原生批量插入,详情请点击《MyBatis 批量插入数据的 3 种方法!》。 ​ 但之前的文章也有不完美之处,原因在于:使用 「循环单次插入」的性能太低,使用「MyBatis 阅读全文
posted @ 2021-10-18 21:39 Java中文社群 阅读(164) 评论(1) 推荐(0) 编辑
摘要: 今天磊哥去公司上班,惊喜的发现 Windows 提示更新了,并且是 Windows 11 正式版,这太让人开心了,二话不说“先升为敬”。 ​ 下载更新 下载完咱就重启更新呗。 Windows 11 初体验 更新按照的时间有点长,大概 10 分钟左右,我是直接从 Windows 10 升级到 Wind 阅读全文
posted @ 2021-10-11 21:16 Java中文社群 阅读(1534) 评论(8) 推荐(3) 编辑
摘要: 批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于《MyBatis Plus 批量数据插入功能,yyds!》的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 MyBatis Plus(下文简称 MP)的批量插入功能很多人都有误解,认为 MP 也是使用循环单次插入数据的, 阅读全文
posted @ 2021-10-08 21:48 Java中文社群 阅读(429) 评论(0) 推荐(4) 编辑
摘要: 最近 Review 小伙伴代码的时候,发现了一个小小的问题,小伙伴竟然在 for 循环中进行了 insert (插入)数据库的操作,这就会导致每次循环时都会进行连接、插入、断开连接的操作,从而导致一定的性能问题,简化后代码如下: /** * 插入操作 */ @RequestMapping("/sav 阅读全文
posted @ 2021-09-26 19:53 Java中文社群 阅读(510) 评论(0) 推荐(2) 编辑
摘要: 在 Java 中有两种锁,一种是内置锁 synchronized,一种是显示锁 Lock,其中 Lock 锁是可中断锁,而 synchronized 则为不可中断锁。 ​ 所谓的中断锁指的是锁在执行时可被中断,也就是在执行时可以接收 interrupt 的通知,从而中断锁执行。 ​ PS:默认情况下 阅读全文
posted @ 2021-09-10 08:33 Java中文社群 阅读(350) 评论(0) 推荐(2) 编辑
摘要: 死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。 1.死锁演示 死锁的形成分为两个方面,一个是使用内置锁 synchronized 形成的死锁,另一种是使用显式锁 Lock 实现的死锁,接下来我们分 阅读全文
posted @ 2021-09-06 09:03 Java中文社群 阅读(488) 评论(1) 推荐(1) 编辑
摘要: 当我们遇到死锁之后,除了可以手动重启程序解决之外,还可以考虑是使用顺序锁和轮询锁,这部分的内容可以参考我的上一篇文章,这里就不再赘述了。然而,轮询锁在使用的过程中,如果使用不当会带来新的严重问题,所以本篇我们就来了解一下这些问题,以及相应的解决方案。 问题演示 当我们没有使用轮询锁之前,可能会出现这 阅读全文
posted @ 2021-08-31 09:00 Java中文社群 阅读(229) 评论(0) 推荐(2) 编辑
摘要: 死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。 死锁示例代码如下: public class DeadLockExample { public static void main(String[] 阅读全文
posted @ 2021-08-28 09:55 Java中文社群 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。 死锁示例 接下来,我们先来演示一下 Java 中最简单的死锁,我们创建两个锁和两个线程,让线程 1 先拥有锁 A,然后在 1s 后尝试获取锁 B,同 阅读全文
posted @ 2021-08-24 08:47 Java中文社群 阅读(528) 评论(2) 推荐(0) 编辑
摘要: 在 Java 中 synchronized 和 ReentrantLock 默认使用的都是非公平锁,而它们采用非公平锁的原因都是一致的,都是为了提升程序的性能。那为什么非公平锁就能提升性能呢?接下来我们一起来看。 非公平锁 非公平锁:每个线程获取锁的顺序是随机的,并不会遵循先来先得的规则,任何线程在 阅读全文
posted @ 2021-08-20 09:28 Java中文社群 阅读(56) 评论(0) 推荐(0) 编辑
摘要: JDK 1.5 之前 synchronized 的性能是比较低的,但在 JDK 1.5 中,官方推出一个重量级功能 Lock,一举改变了 Java 中锁的格局。JDK 1.5 之前当我们谈到锁时,只能使用内置锁 synchronized,但如今我们锁的实现又多了一种显式锁 Lock。 前面的文章我们 阅读全文
posted @ 2021-08-13 21:38 Java中文社群 阅读(90) 评论(0) 推荐(1) 编辑
摘要: synchronized 在 JDK 1.5 时性能是比较低的,然而在后续的版本中经过各种优化迭代,它的性能也得到了前所未有的提升,上一篇中我们谈到了锁膨胀对 synchronized 性能的提升,然而它也只是“众多” synchronized 性能优化方案中的一种,那么我们本文就来盘点一下 syn 阅读全文
posted @ 2021-08-09 22:54 Java中文社群 阅读(263) 评论(0) 推荐(0) 编辑
摘要: synchronized 在 JDK 1.5 之前性能是比较低的,在那时我们通常会选择使用 Lock 来替代 synchronized。然而这个情况在 JDK 1.6 时就发生了改变,JDK 1.6 中对 synchronized 进行了各种优化,性能也得到了大幅的提升,这也是目前版本中还能经常见到 阅读全文
posted @ 2021-08-03 09:15 Java中文社群 阅读(235) 评论(1) 推荐(1) 编辑
摘要: synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰不同对象时,其意义也是不同的,下面我们一起来看。 ​ synchronized 用法 synchroniz 阅读全文
posted @ 2021-08-02 13:18 Java中文社群 阅读(342) 评论(1) 推荐(3) 编辑
摘要: 在我们日常工作中,时间格式化是一件经常遇到的事儿,所以本文我们就来盘点一下 Spring Boot 中时间格式化的几种方法。 ​ 时间问题演示 为了方便演示,我写了一个简单 Spring Boot 项目,其中数据库中包含了一张 userinfo 表,它的组成结构和数据信息如下: 项目目录是这样的: 阅读全文
posted @ 2021-07-26 14:12 Java中文社群 阅读(962) 评论(2) 推荐(4) 编辑
摘要: 上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的正常执行,也就是虽然编译器 IDEA 报错,但程序却能正常的执行,那这其中的原因又是为何? ​ 报错原因分析 报错的原因首先是因为 IDEA 强大的报警机制,@Autowired 为 Spring 的注解,含义是将某类动 阅读全文
posted @ 2021-07-05 08:29 Java中文社群 阅读(428) 评论(0) 推荐(2) 编辑
摘要: 开始之前先自我介绍一下,我叫王磊(人称磊哥),来自陕西西安,三十来岁,在软件行业呆了也算有十余年了。 ​ 2009 年初来乍到,先做了几年的 C# 开发,之后又去了一家 500 强的民营企业做了几年的技术经理,使用的技术也从 C# 开始扩展到了其他语言。 ​ 因为公司有很多技术小组,当时用的技术也比 阅读全文
posted @ 2021-06-18 08:54 Java中文社群 阅读(7417) 评论(37) 推荐(43) 编辑
摘要: 在 Java 中,生成随机数的场景有很多,所以本文我们就来盘点一下 4 种生成随机数的方式,以及它们之间的区别和每种生成方式所对应的场景。 阅读全文
posted @ 2021-06-15 08:53 Java中文社群 阅读(1402) 评论(0) 推荐(1) 编辑
摘要: ThreadLocal 翻译成中文是线程本地变量的意思,也就是说它是线程中的私有变量,每个线程只能操作自己的私有变量,所以不会造成线程不安全的问题。 ​ 线程不安全是指,多个线程在同一时刻对同一个全局变量做写操作时(读操作不会涉及线程不安全问题),如果执行的结果和我们预期的结果不一致就称之为线程不安 阅读全文
posted @ 2021-05-26 09:05 Java中文社群 阅读(337) 评论(2) 推荐(0) 编辑
摘要: SimpleDateFormat线程不安全的5种解决方案! 阅读全文
posted @ 2021-05-17 08:32 Java中文社群 阅读(345) 评论(2) 推荐(2) 编辑
摘要: ThreadLocal 的两种经典使用场景,无可取代的位置。本文通过事例的方式给大家循循渐进的演示 ThreadLocal 的价值... 阅读全文
posted @ 2021-05-13 08:50 Java中文社群 阅读(577) 评论(2) 推荐(1) 编辑
摘要: 在 Java 语言中线程分为两类:用户线程和守护线程,而二者之间的区别却鲜有人知,所以本文磊哥带你来看二者之间的区别,以及守护线程需要注意的一些事项。 1.默认用户线程 Java 语言中无论是线程还是线程池,默认都是用户线程,因此用户线程也被成为普通线程。 以线程为例,想要查看线程是否为守护线程只需 阅读全文
posted @ 2021-05-06 09:49 Java中文社群 阅读(395) 评论(0) 推荐(1) 编辑
摘要: [电影声明图片] 声明:本故事纯属虚构,如果雷同那就是真事了! 大家好,我是线程,我的英文名叫 Thread,别看我现在风光无限,好像人尽皆知的样子,然而我的身世却悲惨离奇。 我出身在一个小山村,那是一个与世隔绝的世外桃源,然而年纪轻轻的我,却展现出了与众不同的性格。比如:当身边的同龄人还在沉浸于玩 阅读全文
posted @ 2021-04-23 12:31 Java中文社群 阅读(447) 评论(1) 推荐(3) 编辑
摘要: 大家好,我是 Semaphore,我的中文名字叫“信号量”,我来自 JUC(java.util.concurrent)家族。 我们家族有很多优秀的成员,比如:CountDownLatch(等待其他线程都执行完再执行某线程),CyclicBarrier(循环阻塞一组线程,直到某个事件达成),当然我也不 阅读全文
posted @ 2021-04-21 09:33 Java中文社群 阅读(328) 评论(0) 推荐(1) 编辑
摘要: 上一篇咱讲了 CountDownLatch 可以解决多个线程同步的问题,相比于 join 来说它的应用范围更广,不仅可以应用在线程上,还可以应用在线程池上。然而 CountDownLatch 却是一次性的计数器,以王者农药来说,咱们不可能一场团战就决定比赛的输赢,所以在某些场景下,咱们是需要重复使用 阅读全文
posted @ 2021-04-09 09:28 Java中文社群 阅读(808) 评论(3) 推荐(3) 编辑