Is this you? As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.
Claim your profile
Articles by Thread.currentThread .getName
Source Code Analysis of Apache SeaTunnel Zeta Engine (Part 1): Server Initialization
This series of articles is based on Apache SeaTunnel version 2.3.6 and introduces the full process of handling a task from submission to execution with the Zeta engine. This document aims to assist newcomers to SeaTunnel by providing some guidance.
3分钟带你搞定Spring Boot中Schedule
在实际的业务开发过程中,我们经常会需要定时任务来帮助我们完成一些工作,例如每天早上 6 点生成销售报表、每晚 23 点清理脏数据等等。 如果你当前使用的是 SpringBoot 来开发项目,那么完成这些任务会非常容易! SpringBoot 默认已经帮我们完成了相关定时任务组件的配置,我们只需要添加相应的注解@Scheduled就可以实现任务调度! 2.1、pom 包配置 pom包里面只需要引入Spring Boot Starter包即可! <dependencies> <!--spring boot核心--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!--spring boot 测试--> <dependency> <groupId>org.springframework.boot</groupId>...
SpringBoot3 常用的第三方接口调用十种方式
环境:SpringBoot.3.3.0 简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范,以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式,每种方式都有其适用场景和优势,选择最适合的方式将有助于提高开发效率和系统性能。接下来将全面介绍10种第三方接口调用的实现方式。 实战案例 2.1 JDK URL URL url = URI.create("http://192.168.0.124:8000/api/data").toURL() ; URLConnection connection = url.openConnection() ; connection.setDoInput(true) ; connection.setDoOutput(true) ; InputStream inputStream = connection.getInputStream() ; String ret =...
阿里二面:如何定位&避免死锁?连着两个面试问到了! - 码农Academy - 博客园
在面试过程中,死锁是必问的知识点,当然死锁也是我们日常开发中也会遇到的一个问题,同时一些业务场景例如库存扣减,银行转账等都需要去考虑如何避免死锁,一旦线上发生了死锁,那可能年终不保。。。。。下面我们就来聊一聊死锁如何定位,以及如何避免。 死锁(Deadlock)是指在操作系统里,两个或多个并发线程在执行过程中,因争夺资源而造成的一种互相等待的现象,且无外力干预的情况下,这些线程都无法进一步执行下去。每个线程至少持有一个资源并等待其他线程所持有的资源才能继续执行,从而形成了一个循环等待链,导致所有线程都被阻塞,无法顺利完成。...
Synchronizes:Semaphore、CountDownLatch、CyclicBarrier、Exchanger、Phaser_loghhh的技术博客_51CTO博客
loghhh 2023-12-22 16:44:35 文章标签 System 构造方法 初始化 文章分类 Java 后端开发 ©著作权归作者所有:来自51CTO博客作者loghhh的原创作品,请联系作者获取转载授权,否则将追究法律责任 赞 收藏 评论 分享 举报
Spring Boot集成RocketMQ全部种类消息实现+生产者和消费者配置信息介绍(内含5.x新增可自定义时间的定时/延时消息)
这里不对RocketMQ做介绍是完全的功能实现没有废话,这里使用@RocketMQMessageListener注解+RocketMQListener接口实现,会对@RocketMQMessageListener注解中的参数做详细介绍。 需要RocketMQ安装教程可以参考: Docker部署RocketMQ5.x docker-compose部署RocketMQ5.x <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>...
RocketMQ源码(二)消息消费的模式到底是Push还是Pull?-阿里云开发者社区
开发者社区 弹性计算 正文 2023-11-29 7 本文涉及的产品 推荐场景: 部署并使用Docker 快速搭建云上博客 搭建微信小程序 简介: RocketMQ源码(二)消息消费的模式到底是Push还是Pull? RocketMQ为开发者提供了两种消息的消费模式,分别是Pull和Push,对应的实现是DefaultMQPullConsumer和DefaultMQPushConsumer; 接下来我将带大家通过以下几个方面了解这两种模式: Pull和Push的使用示例 跟踪源码分析两种模式的实现原理 RocketMQ到底是Push还是Pull呢? Tip:我本人在多年的开发经验中常用的MQ中间件如Kafka、RocketMQ都实战使用的,简单的使用示例可以参考我Git。 https://gitee.com/yeeevip/yeee-memo/tree/master/middle-ware/mq https://github.com/yeeevip/yeee-memo/tree/master/middle-ware/mq 1 Pull模式...
聊聊 RocketMQ 消息轨迹
这篇文章,我们聊一聊 RocketMQ 的消息轨迹设计思路。 查询消息轨迹可作为生产环境中排查问题强有力的数据支持 ,也是研发同学解决线上问题的重要武器之一。 消息轨迹是指一条消息从生产者发送到 Broker , 再到消费者消费,整个过程中的各个相关节点的时间、状态等数据汇聚而成的完整链路信息。 当我们需要查询消息轨迹时,需要明白一点:消息轨迹数据是存储在 Broker 服务端,我们需要定义一个主题,在生产者,消费者端定义轨迹钩子。 2.1 修改 Broker 配置文件 # 开启消息轨迹 traceTopicEnable=true 2.2 生产者配置 public DefaultMQProducer(final String producerGroup, boolean enableMsgTrace) public DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic) 在生产者的构造函数里,有两个核心参数:...
zookeeper应用场景(一)_高如风的博客-CSDN博客
一、zookeeper客户端api 1、官方Java客户端api 引入zookeeper client依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.9.0</version> </dependency> 1)Zookeeper主要的构造方法参数 /** * * @param connectString 标识zookeeper连接,ip:port对应一个zookeeper节点,如果有多个就就用逗号分隔,客户端会选择任意一个节点建立连接 * @param sessionTimeout 建立连接会话超时时间 * @param watcher 用于接收到来自己zookeeper集群的事件 * @throws IOException */ public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) throws IOException {...
详解Spring多线程下如何保证事务的一致性-51CTO.COM
2023-10-08 08:29:31 我们先来大概的了解下Spring事务的工作原理,核心技术是通过AOP实现,将获取的Connection对象绑定到当前线程上下文中(ThreadLocal)。 环境:Spring5.3.23 1.
Zookeeper经典应用场景实战(一)-CSDN博客
1、Zookeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有: ZooKeeper官方的Java客户端API。 第三方的Java客户端API,比如Curator。 ZooKeeper官方的客户端API提供了基本的操作。例如,创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。不过,对于实际开发来说,ZooKeeper官方API有一些不足之处,具体如下: ZooKeeper的Watcher监测是一次性的,每次触发之后都需要重新进行注册。 会话超时之后没有实现重连机制。 异常处理烦琐,ZooKeeper提供了很多异常,对于开发人员来说可能根本不知道应该如何处理这些抛出的异常。 仅提供了简单的byte[]数组类型的接口,没有提供Java POJO级别的序列化数据处理接口。 创建节点时如果抛出异常,需要自行检查节点是否存在。 无法实现级联删除。 总之,ZooKeeper官方API功能比较简单,在实际开发过程中比较笨重,一般不推荐使用。 引入zookeeper...
【Zookeeper专题】Zookeeper经典应用场景实战(一)_验证码有毒的博客-CSDN博客
前置知识 在学习本节课之前,至少需要掌握Zookeeper的节点特性,以及基本操作。 《【Zookeeper专题】Zookeeper特性与节点数据类型详解》 课程内容 Zookeeper的客户端有很多,这边主要介绍的是两种: Zookeeper官方的Java客户端API 第三方的Java客户端API,Curator ZooKeeper官方的客户端API提供了基本的操作,例如:创建会话、增删查改节点等(就是对原有命令交互式客户端的封装)。不过,Zookeeper官方客户端封装度比较低,使用起来不是很方便。这种不方便体现在: ZooKeeper的Watcher监测是一次性的,每次触发之后都需要重新进行注册 会话超时之后没有实现重连机制 异常处理烦琐,ZooKeeper提供了很多异常,对于开发人员来说可能根本不知道应该如何处理这些抛出的异常 仅提供了简单的byte[]数组类型的接口,没有提供Java POJO级别的序列化数据处理接口 创建节点时如果抛出异常,需要自行检查节点是否存在 无法实现级联删除 当然不便之处不止这些,不管怎样,在实际开发中,我们通常不是很建议使用官方API的。...
聊聊RocketMQ 消息轨迹-阿里云开发者社区
这篇文章,我们聊一聊 RocketMQ 的消息轨迹设计思路。 查询消息轨迹可作为生产环境中排查问题强有力的数据支持 ,也是研发同学解决线上问题的重要武器之一。 消息轨迹是指一条消息从生产者发送到 Broker , 再到消费者消费,整个过程中的各个相关节点的时间、状态等数据汇聚而成的完整链路信息。 当我们需要查询消息轨迹时,需要明白一点:消息轨迹数据是存储在 Broker 服务端,我们需要定义一个主题,在生产者,消费者端定义轨迹钩子。 2.1 修改 Broker 配置文件 # 开启消息轨迹 traceTopicEnable=true 2.2 生产者配置 public DefaultMQProducer(final String producerGroup, boolean enableMsgTrace) public DefaultMQProducer(final String producerGroup, boolean enableMsgTrace, final String customizedTraceTopic) 在生产者的构造函数里,有两个核心参数:...
由浅入深Netty基础知识IO相关-阿里云开发者社区
1 stream vs channel stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层) stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞 API,网络 channel 可配合 selector 实现多路复用 二者均为全双工,即读写可以同时进行 2 IO 模型 同步阻塞、同步非阻塞、同步多路复用、异步阻塞(没有此情况)、异步非阻塞 同步:线程自己去获取结果(一个线程) 异步:线程自己不去获取结果,而是由其它线程送结果(至少两个线程) 当调用一次 channel.read 或 stream.read 后,会切换至操作系统内核态来完成真正数据读取,而读取又分为两个阶段,分别为: 等待数据阶段 复制数据阶段 阻塞 IO 非阻塞 IO 多路复用 信号驱动 异步 IO 阻塞 IO vs 多路复用 3 零拷贝 传统的 IO 将一个文件通过 socket 写出 内部工作流程是这样的: java 本身并不具备 IO 读写能力,因此 read 方法调用后,要从 java...
【RocketMQ】顺序消息实现总结 - shanml - 博客园
全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用。 局部有序 假设一个Topic分配了两个消息队列,生产者在发送消息的时候,可以对消息设置一个路由ID,比如想保证一个订单的相关消息有序,那么就使用订单ID当做路由ID,在发送消息的时候,通过订单ID对消息队列的个数取余,根据取余结果选择消息队列,这样同一个订单的数据就可以保证发送到一个消息队列中,消费者端使用MessageListenerOrderly处理有序消息,这就是RocketMQ的局部有序,保证消息在某个消息队列中有序。 接下来看RoceketMQ源码中提供的顺序消息例子(稍微做了一些修改): 生产者 public class Producer { public static void main(String[] args) throws UnsupportedEncodingException { try { // 创建生产者 DefaultMQProducer...
微服务 第一章 Java线程池技术应用
第一章 Java线程池技术应用 介绍Java的线程、线程池等操作 1.1、继承Thread类(只运行一次) public class ThreadTest extends Thread{ @Override public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { new ThreadTest().start(); } } import java.util.Date; @Slf4j public class ThreadTest extends Thread{ @Override public void run() { log.info("线程名称:{} , 当前时间:{}" , Thread.currentThread().getName() , new Date().getTime() ); } public static void main(String[] args) { while (true)...
【Java核心知识】ThreadLocal相关知识_爱幻想-hjyp的博客-CSDN博客
什么是ThreadLocal ThreadLoacal类可以为每个线程保存一份独有的变量,该变量对于每个线程都是独占的。实现原理为每个Thread类中包含一个ThreadHashMap,key为变量的对应的ThreadLocal对象,value为变量的值。 在日常使用中,我们可以通过set(value)方法设置值,然后通过get()方法获取值,示例代码如下: 我们通过线程池执行了五个线程,每个线程都有一份自己独有的id变量,实现了线程间的数据隔离。 @Slf4j public class ThreadLocalTest { private static final ThreadLocal<Integer> id = new ThreadLocal<>(); @Test public void testThreadLocal() { ExecutorService executorService = Executors.newCachedThreadPool(); try { for (int i = 0; i < 5; i ++) { int finalI = i;...
万字长文硬核AQS源码分析 - 小新成长之路 - 博客园
阅读本文前,需要储备的知识点如下,点击链接直接跳转。 java线程详解 Java不能操作内存?Unsafe了解一下 一文读懂LockSupport AQS即AbstractQueuedSynchronizer的简称,翻译过来就是抽象队列同步器的意思,由Doug Lea大神开发的。说他抽象是因为它提供的是一个基于队列的同步器框架,定义了一些基础功能方法(控制状态变量,获取和释放同步状态方法以及入队出队操作等),具体场景使用只需要根据需要实现对应的方法即可。我们在锁(比如ReentrantLock)、并发工具类(比如CountDownLatch)都可以看到内部类继承了AbstractQueuedSynchronizer,也就是说AQS才是这些类的基石。说了这么多,感觉把抽象说的越抽象了,下面我们从几个栗子入手吧。 注意:本文使用的JDK版本为JDK8,AQS的代码非常巧妙和经典,很多细节和模块都可以单独拉出来写一篇文章,很多细节问题建议自行阅读和思考。 本篇文章主要讲独占模式的应用和原理分析,关于共享模式不再这里展开细讲。 ReentrantLock的使用...
Zookeeper经典应用场景实战(一)_zookeeper实战_会code的厨子的博客-CSDN博客
ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有: ZooKeeper官方的Java客户端API。 第三方的Java客户端API,比如Curator。 ZooKeeper官方的客户端API提供了基本的操作。例如,创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。不过,对于实际开发来说,ZooKeeper官方API有一些不足之处,具体如下: ZooKeeper的Watcher监测是一次性的,每次触发之后都需要重新进行注册。 会话超时之后没有实现重连机制。 异常处理烦琐,ZooKeeper提供了很多异常,对于开发人员来说可能根本不知道应该如何处理这些抛出的异常。 仅提供了简单的byte[]数组类型的接口,没有提供Java POJO级别的序列化数据处理接口。 创建节点时如果抛出异常,需要自行检查节点是否存在。 无法实现级联删除。 总之,ZooKeeper官方API功能比较简单,在实际开发过程中比较笨重,一般不推荐使用。 1.1 Zookeeper 原生Java客户端使用...
Redis搭配RedisTemplate实现分布式锁实战实例_redistemplate 分布式锁_持键写浮生的博客-CSDN博客
研究加锁的初衷是:监听redis过期消息提醒,同一个数据(键)过期会有多次通知提醒。原因是:可能是由于 Redis 的主从复制或者分片集群等机制导致的。在主从复制或者分片集群中,可能会发生多个节点同时订阅了相同的键空间通知,从而导致同一个键空间事件被多次触发。 我的解决方法是:给键过期后提醒的回调函数加锁,收到多个通知提醒,回调函数加锁后最终只会有一个执行,其他没有获得锁的回调不会执行,这样就避免了重复执行任务代码。 (1) 在加锁时就要给锁设置一个标识,进程要记住这个标识。当进程解锁的时候,要进行判断,是自己持有的锁才能释放,否则不能释放。可以为key 赋一个随机值,来充当进程的标识。 (2)解锁时要先判断、再释放,这两步需要保证原子性,否则第二步失败的话,就会出现死锁。而获取和删除命令不是原子的,这就需要采用Lua 脚本,通过 Lua 脚本将两个命令编排在一起,而整个Lua脚本的执行过程是原子的。 按照以上思路最终方案如下: 加锁 set key random-value nx ex seconds 解锁 if redis.call("get",KEYS[1]) ==...
ReentrantLock介绍及使用(超详细)_reentrantlock使用_汪xiao羊的博客-CSDN博客
点击 Mr.绵羊的知识星球 解锁更多优质文章。 目录 1. 简介 3. 优点 4. 原理 1. 简介 ReentrantLock是一种基于AQS(Abstract Queued Synchronizer)框架的应用实现,是JDK中一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。 2. 是什么类型的锁 (1) 公平锁或非公平锁(下面案例中有实际代码,自己执行一遍更容易理解) a. 公平锁:先来的线程先执行,排成排按顺序。 优点:所有的线程都能得到资源,不会饿死在队列中。 缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。 b.
工具分享:Springboot+Netty+Xterm搭建一个网页版的SSH终端_网页版ssh_lucky.麒麟的博客-CSDN博客
一. 简述 搭建一个web ssh,主要是借助websocket和xterm,可以实现一个类似于xshell的效果,如图: 二. 技术栈 这里使用了springboot、netty、jsch、react、Ts,xterm。 这里我用了springboot和netty实现了websocket,jsch用来连接服务器,react和xterm实现终端的页面。 这里的使用的版本都是最新版的,给大家踩坑,下面看一下如何实现吧! 三.
Java开源工具库使用之Guava_guava 依赖_aabond的博客-CSDN博客
Guava 是谷歌开源的 Java 核心库,它包括很多新的集合类型(如 multimap 和 multiset)、不可变集合、graph 库,以及用于并发、I/O、哈希、缓存、基本类型、字符串等的实用代码!它被广泛应用于谷歌中的大多数 Java 项目中,也被许多其他公司广泛使用。 github 地址:https://github.com/google/guava api doc 地址:https://guava.dev/releases/snapshot-jre/api/docs/ pom 依赖: <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>31.1-jre</version> </dependency> gauva 所有包如下: 包名用处 com.google.common.annotations guava 一些注解 com.google.common.base 基本相关 com.google.common.cache 缓存相关程序...
阿里开源TransmittableThreadLocal使用经验记录_transmittablethreadlocal 使用_不吃速冻饺子的博客-CSDN博客
简介: 本文章主要记录我在一次业务优化中,使用线程池带来的子父线程值传递问题,及使用TransmittableThreadLocal来解决该问题的经验,并对TransmittableThreadLocal原理做些梳理。 业务背景 前段时间在工作项目中,被指派一项优化任务,由于原功能耗时较久,影响使用体感;梳理完该功能涉及到的业务后,发现具备复杂、量大等特点。 将一个大体量数据循环分割成若干小循环,并行执行,结果汇总,是该优化方案中的一环。但原业务中使用ThreadLocal。 ThreadLocal是解决线程间数据隔离性的,源于它将值存储在每个线程Thread的自己变量(ThreadLocal.ThreadLocalMap)中,但是ThreadLocal有个弊端,由于线程间隔离性,子线程无法捕获父线程ThreadLocalMap里的值。一旦使用多线程,需要解决值传递问题。 尝试使用InheritableThreadLocal(Itl)解决问题 Thread线程有两个ThreadLocal.ThreadLocalMap 类型变量threadLocals 和...
Show More
loading
Actions
Is this you?
As a journalist, you can create a free Muck Rack account to customize your profile, list your contact preferences, and upload a portfolio of your best work.Get in touch with Thread.currentThread
Contact Thread.currentThread, search articles and posts on X, monitor coverage, and track replies from one place.
Learn more about Muck Rack