多线程
文章平均质量分 84
xiaolege_
目前重点研究Spring、Spring boot、Spring cloud、Kafka、Flink、Xxl-job、MySQL、Elastic search、Redis、Docker等,欢迎大家关注交流。
展开
-
记一次mybatis-plus数据自动填充爆露出来的多线程的问题
技术背景:spring boot+mybatis-plus做公共字段填充(MetaObjectHandler),之前项目没有接入用户系统故用户名填充都是使用的默认值,最近公司整合统一网关,接入用户信息,单例模式使用ThreadLocal<Map<String, String>> threadLocal记录当前登陆用户信息,一切看似正常,用户信息获取都正常填充记录入库。但是测试组细心的小姐姐发现有一个接口调用的过程中发生用户名被还原成默认值的情况,一开始还不信。仔细观察发原创 2021-09-26 16:59:32 · 637 阅读 · 1 评论 -
java全局锁和对象锁以及synchronized,ReentrantLock,Atomic 使用场景描述
对象锁:/*** 全局锁,对象锁的区别* @author Z7M-SL7D2**/class Person{ private static int COUNT = 10; // 同一时间只允许一个线程吃 public synchronized void eat() { System.out.print("开始吃 "); COUNT--; System.out.print(" 吃东...转载 2021-03-20 09:05:01 · 791 阅读 · 0 评论 -
深入剖析ReentrantLock公平锁与非公平锁源码实现
原文地址: https://blog.csdn.net/lsgqjh/article/details/63685058ReentrantLock是JUC包中重要的并发工具之一,支持中断和超时、还支持尝试机制获取锁, 并且是一种通过编程控制的可重入锁,尽可能减少死锁问题。本文以公平与非公平锁的加锁释放锁过程成为主线,分析ReentrantLock的重要内容。目标掌握AQS基本原理,理解ReentrantLock的具体实现 挖掘体会AQS精妙设计总之,学习AQS过程,要多思考为什么要这样实现转载 2020-10-16 17:58:06 · 153 阅读 · 0 评论 -
BlockingQueue详解
注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。二. 认识BlockingQueu转载 2020-10-16 15:47:46 · 466 阅读 · 1 评论 -
优雅的使用线程池
线程池不仅在项目中是非常常用的一项技术而且在面试中基本上也是必问的知识点,接下来跟着我一起来巩固一下线程池的相关知识。在了解线程池之前我们先了解一下什么是进程什么是线程进程 程序:一般是一组CPU指令的集合构成的文件,静态存储在诸如硬盘之类的存储设备上 进程:当一个程序要被计算机运行时,就是在内存中产生该程序的一个运行时实例,我们就把这个实例叫做进程 用户下达运行程序的命令以后,就会产生一个进程,同一个程序可以产生多个进程(一对多的关系),以允许同时有多个用户运行同一个程序,却不会相转载 2020-09-11 10:26:50 · 121 阅读 · 0 评论 -
Java子线程获取主线程的全局变量(ThreadLocal)
接上篇spring boot+多线程的使用,引入多线程后很大概率会遇到主线程全局变量共享给子线程的情况,以及各线程变量不共享的情况,下面就简单介绍下两个神器ThreadLocalInheritableThreadLocalThreadLocal做线程级的数据隔离InheritableThreadLocal可继承的线程变量表,可以让子线程获取到父线程中ThreadLocal的值。看个例子:public class BaseTest { public static...原创 2020-09-03 15:15:20 · 7478 阅读 · 2 评论 -
spring boot+多线程实践(异步+返回值)
不扯淡了,直接开干,注意点在最后一定一定要看。在Springboot中对其进行了简化处理,只需要配置一个类型为java.util.concurrent.TaskExecutor或其子类的bean,并在配置类或直接在程序入口类上声明注解@EnableAsync。调用也简单,在由Spring管理的对象的方法上标注注解@Async,显式调用即可生效。以下是一个带有返回值的异步线程任务示例:配置类:/** * @Description: 配置类实现AsyncConfigurer接...原创 2020-08-25 16:53:25 · 6682 阅读 · 0 评论 -
利用多线程实现对csv文件的处理。
背景:数据组同事需要一个小工具帮组他们处理一些数据。首先他们的原数据是csv文件的,需要我们把里面的数据和别的系统里面的数据逐条匹配完善后返回给他们一个csv文件。原数据的csv一般3-5万条数据量(单列的)。解决方案:首先读取csv文件,生成待处理数据集合。然后把该数据集合分片,以使用多线程进行匹配处理。最后通过POI生成csv输出。(一开始同事没有使用多线程,虽然数据量不算大,但是...原创 2019-10-12 11:50:19 · 5393 阅读 · 5 评论