摘要:
前言 昨天我们分享了本地springboot项目构建docker镜像的内容,详细介绍了springboot项目打包、镜像构建、基于docker启动运行的全过程,这个技术虽然不是特别难,但是很实用,因为镜像构建完成后,我们不仅可以让我们的服务在docker中运行,也可以让它在k8s中运行,今天我们就来 阅读全文
摘要:
在java多线程编程中,我们会经常遇到各种因为数据共享带来的线程安全问题,为了解决这个问题,我们经常需要给方法或者部分代码加锁,但是如果直接通过synchronized这样的关键字加锁的话,性能不够友好,虽然Lock也可以解决这个问题,但是相比于无锁编程,性能也是不够友好,为了更好地解决这个问题,从 阅读全文
摘要:
前言 不知道各位小伙伴在此之前,是否有听过或者了解过agent相关技术,没有听说过也没有关系,我们今天的目的就是介绍agent的相关技术,探讨agent的应用场景,分享一些实际开发中的应用案例。 印象中,我第一次了解agent技术,是在分享skywalking这款工具的时候,skywalking与我 阅读全文
摘要:
前言 现在,很多小伙伴都在日常开发中使用lambda表达式,我也经常用,我们线上环境的代码更是广泛使用,而且我之前还给大家分享过一些常用的lambda表达式,因为lambda确实很好用,用起来也确实很方便,但是各位小伙伴在使用过程中一定要做好数据校验,避免线上环境出现出现空指针异常,今天我们就来分享 阅读全文
摘要:
前言 前几天,我们分享了原子类相关的知识点,展示了原子类的一些用法,之前也分享了lock相关的应用,但是我一直有一个困惑,就是在多线程数据安全的几个常用解决方案中,到底哪一个性能最好,我们在实际应用开发中应该如何选择,今天我们就来简单探讨下这个问题。 性能对比 开始之前,我们先看这样一段代码: pu 阅读全文
摘要:
前言 昨天我们分享了多线程里面的一个计数器countDownLatch,它的主要作用是控制线程执行顺序,确保上一个操作完成后,下一个线程才能启动运行,但是某些情况下countDownLatch并不能满足我们的需求,比如执行A线程10次后,我们需要执行B线程,然后再执行A线程10次,循环往复,为了应付 阅读全文
摘要:
前言 在java中,锁lock是多线程编程的一个重要组件,可以说凡是涉及到多线程编程,线程安全这一块就无法避开lock,进一步说就是所有的线程安全都是基于锁实现的,只是从形式上分为隐式锁和显式锁,synchronized就属于隐式锁,像我们之前分享的可重入锁就属于显式锁,当然显示锁还有很多,我们今天 阅读全文
摘要:
前言 最近一段时间,我们一直都是在分享多线程相关的知识点,截止到今天我们已经分享过锁、计数器等相关知识,主要分享了一些常用的多线程控制方式,今天我们来继续分享另一个多线程控制组件——Semaphore。 Semaphore 示例代码 Semaphore也是jdk1.5引入的组件,它的字面意思是信号量 阅读全文
摘要:
前言 今天我们来分享最后多线程最后一个工具类组件,之后我们会继续探索多线程的相关知识:线程池、并发容器和框架,然后就是总结和查漏补缺。 今天的内容很简单,内容也不太多,但是应用场景很典型,可以解决我们实际开发中数据对比的应用需求,好了,我们直接开始吧。 Exchanger exchanger也是jd 阅读全文
摘要:
前言 原本是昨天分享countDownLatch相关知识点的,但是昨天粗略看写了,发现自己对countDownLatch的认知还不够,所以就半道分享了常用的三种多线程线程安全解决方案的性能比较,虽然过程中翻车了,但是还是有收获的,也不亏。今天又去看了下count的相关知识,然后做了一个小demo,感 阅读全文
摘要:
前言 最近一段时间,我们一直都在分享多线程相关知识,也一直有用线程池,但是一直没有介绍线程池相关知识,所以今天我们就先来看下线程池相关的知识点。 线程池 ThreadPool,线程池,顾名思义就是存放线程的池子,也是jdk1.5引入的。对我们而言,它的最主要优势就是简化了线程启动流程,让我们可以更方 阅读全文
摘要:
前言 昨天我们分享了线程池的相关知识点,我们先做一个简单回顾,昨天的内容主要是围绕线程池的构造方法,解释了各个参数的作用,以及如何定义一个线程池,最后我们通过一段示例代码,展示了各个参数的作用,同时也演示了不同参数下线程池运行状态情况,最终我们得出的结论是: 线程池能够处理的最大任务数是corePo 阅读全文