多线程
文章平均质量分 76
C18298182575
跳出舒适区
展开
-
轻量级状态机框架 Sateless4j 与重入锁的定义
加锁成功,触发状态机流程,stateMachine.fire(event);在使用状态机时,入参中都会定义这样一个可重入锁的变量,关于以下问题进行探讨。请求2,加锁失败,不执行fire(不执行请求2状态变更),返回请求1次态。1.为什么定义这样一个变量,有什么用,定义为可重入还是不可重复。请求1,fire,请求2,fire,请求3,fire。3.可重入/不可重入,对业务流程影响。2.可重入/不可重入,区别与影响。请求1,redis加锁,未释放。请求3,加锁失败,同请求2。三,举例重现,并发请求。原创 2023-04-07 15:21:31 · 332 阅读 · 0 评论 -
记录一次synchronized 针对代码块加对象锁案例
synchronized 代码块加对象锁原创 2022-11-25 16:55:35 · 269 阅读 · 0 评论 -
浅析Java中synchronized与static synchronized
synchronized VS static synchronized转载 2022-11-25 16:17:10 · 589 阅读 · 0 评论 -
浅析Java中synchronized与static synchronized
synchronized VS static synchronized转载 2022-11-25 16:12:57 · 725 阅读 · 0 评论 -
ThreadPoolTaskExecutor和ThreadPoolExecutor
ThreadPoolTaskExecutor和ThreadPoolExecuto转载 2022-11-14 17:17:27 · 250 阅读 · 0 评论 -
springboot中@Async多线程注解使用
@Async创建线程池转载 2022-11-14 17:15:58 · 311 阅读 · 0 评论 -
SpringBoot 线程池配置 实现AsyncConfigurer接口方法
@Async 自定义线程池转载 2022-11-14 17:10:08 · 1240 阅读 · 0 评论 -
@ASYNC,@ENABLEASYNC,ASYNCCONFIGURER 自定义线程
@Async自定义线程池转载 2022-11-14 17:08:45 · 260 阅读 · 0 评论 -
@Async 为什么要自定义
@Async 自定义转载 2022-11-11 10:38:29 · 233 阅读 · 0 评论 -
在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法
@Asyn转载 2022-11-11 10:20:23 · 189 阅读 · 0 评论 -
可重入锁详解(什么是可重入)
可重入锁详解概述什么是 “可重入”,可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。例如package com.test.reen;// 演示可重入锁是什么意思,可重入,就是可以重复获取相同的锁,synchronized和ReentrantLock都是可重入的// 可重入降低了编程复杂性public class WhatReentrant { public static void main(String[] args) { new Thread(ne...转载 2021-12-24 09:53:55 · 287 阅读 · 0 评论 -
ThreadLocal 原理和使用场景分析
ThreadLocal 不知道大家有没有用过,但至少听说过,今天主要记录一下 ThreadLocal 的原理和使用场景。使用场景直接定位到 ThreadLocal 的源码,可以看到源码注释中有很清楚的解释:它是线程的局部变量,这些变量只能在这个线程内被读写,在其他线程内是无法访问的。 ThreadLocal 定义的通常是与线程关联的私有静态字段(例如,用户ID或事务ID)。变量有局部的还有全局的,局部变量没什么好说的,一涉及到全局,那自然就会出现多线程的安全问题,要保证多线程安全访问,不出现.转载 2021-12-06 18:14:04 · 260 阅读 · 0 评论 -
线程池的工作原理
我们在工作中或多或少都使用过线程池。但是为什么要使用线程池呢?从它的名称中我们就可以猜到,线程池是使用了一种池化技术(Pooling Technology)。和很多其他池化技术一样,都是为了更高效的利用资源,例如连接池,内存池等。数据库连接是一种很昂贵的资源,创建和销毁都需要付出高昂的代价。为了避免频繁地创建数据库连接,所以产生了数据库连接池技术。优先在池子中创建一批数据库连接,当有需要访问数据库时,直接到池子中去获取一个可用的连接,使用完了之后再归还到连接池中去。同样的,线程也是一种很宝贵的资源,并且转载 2021-02-23 22:13:27 · 361 阅读 · 0 评论 -
CountDownLatch的两种常用场景
CountDownLatch的两种使用场景先来看看 CountDownLatch 的源码注释;/***Asynchronizationaidthatallowsoneormorethreadstowaituntil*asetofoperationsbeingperformedinotherthreadscompletes.**@since1.5*@authorDougLea*/publicclassCountDow...转载 2021-02-08 11:04:47 · 303 阅读 · 0 评论 -
Java中创建线程池的正确方法
Executors的创建线程池的方法,创建出来的线程池都实现了ExecutorService接口。常用方法有以下几个:a、newFiexedThreadPool(int Threads):创建固定数目线程的线程池。b、newCachedThreadPool():创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加...转载 2020-04-21 11:38:02 · 338 阅读 · 0 评论 -
AsyncResult使用场景
场景从es查询商品信息,分批查询,5000个查询一次,再把每次查询结果汇总,如果分10次查询,正常查询每次返List<Product>,要等前一次查询返回结果后,才能执行下一次查询,汇总结果,是同步执行的过程。试想如果可以同时进行查询,之间互不影响,每个查询返回结构后,直接汇总,这样就大大节约了查询时间。AsyncResult作用就在这里。借用举例AsyncResult是...原创 2020-01-17 11:45:17 · 10354 阅读 · 2 评论 -
多线程 + java nio 实现按行读取并处理超大文件
参考:https://blog.csdn.net/qq_25473933/article/details/79603253https://blog.csdn.net/icy_1992/article/details/41869365转载 2019-11-02 17:00:12 · 2093 阅读 · 0 评论 -
java 多线程内存模型
首先解读Java内存模型(这里区别于JVM的内存模型,堆、栈、工作区) Java 内存模型来屏蔽掉各种硬件和操作系统的内存差异,达到跨平台的内存访问效果。JLS(Java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model) Java内存模型规定了所有的变量都存储在主内存中,此处的主内存仅仅是虚拟机内存的一部分,而虚拟机内存也仅仅是计算机物理内存的一部分(为...转载 2019-01-10 13:32:08 · 205 阅读 · 0 评论 -
CAS机制
我们先看一段代码:启动两个线程,每个线程中让静态变量count循环累加100次。最终输出的count结果一定是200吗?因为这段代码是非线程安全的,所以最终的自增结果很可能会小于200。我们再加上synchronized同步锁,再来看一下。加了同步锁之后,count自增的操作变成了原子性操作,所以最终输出一定是count=200,代码实现了线程安全。虽然synchronized...转载 2019-01-01 17:04:35 · 135 阅读 · 0 评论 -
线程为什么要休眠
线程休眠线程休眠的目的是使线程让出CPU的使用权.当线程休眠时,会将CPU资源的使用交给其他线程,以便能够线程之间的轮换调用.当休眠一定时间后,线程就会苏醒,然后进入准备状态等待执行. 1、方法介绍 sleep(long millis) 线程睡眠 millis 毫秒 sleep(long millis, int nanos) 线程睡眠 millis 毫秒 + n...转载 2019-01-02 14:45:25 · 4010 阅读 · 0 评论 -
Lock和synchronized的区别和使用(转载)
原文:https://www.cnblogs.com/baizhanshi/p/6419268.html要点: 总结来说,Lock和synchronized有以下几点不同: 1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;--接口与关键字 2)synchronized在发生异常时,会自动释放线程占有的锁,因此不...转载 2019-01-16 17:12:18 · 152 阅读 · 0 评论 -
ThreadLocal是什么?ThreadLocal的原理分析
关键字:线程局部变量,线程间独立,私有的变量副本本篇文章给大家带来的内容是关于ThreadLocal是什么?ThreadLocal的原理分析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。1、 ThreadLocal是什么ThreadLocal提供线程局部变量。这些变量与普通的变量不同之处在于,每个访问这种变量的线程(通过它的get或set方法)都有自己的、...转载 2019-05-06 14:35:16 · 420 阅读 · 0 评论 -
锁
个人对锁机制的大致理解是:关键在于明白哪个代码块是被上锁的区域(理解为房间),哪个对象是作为开锁的钥匙。就能很好的解释了。对于synchronized代码块来说,它自己就是被锁的区域(房间),而钥匙就是synchronized(obj){}这个块的括号里面的那个obj,并且这个obj钥匙在任何一个时刻只能被一个线程拥有占用。记住一个被锁的房间,只能有一把钥匙可以开,而一把钥匙在任何时刻只能...转载 2019-05-06 15:47:31 · 107 阅读 · 0 评论 -
java发送邮件
1,邮件模板2,代码2.1)调用方 /** * 发送邮件 * * @param request */ private void sendEmail(BaseRequestModel request, AddressEntity addressEntity) { // 发送信息 Long belon...原创 2019-05-28 11:57:42 · 551 阅读 · 0 评论 -
ExecutorService中submit和execute的区别
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。一、创建任务任务就是一个实现了Runnable接口的类。创建的时候实run方法即可。二、执行任务通过...转载 2019-05-28 16:22:41 · 188 阅读 · 0 评论 -
如何设计并实现一个秒杀系统?(含完整代码)
欢迎关注头条号:石杉的架构笔记周一至周五早八点半!精品技术文章准时送上!!!精品学习资料获取通道,参见文末本文来源:crossoverJie前言之前在 Java-Interview 中提到过秒杀架构的设计,这次基于其中的理论简单实现了一下。本次采用循序渐进的方式逐步提高性能达到并发秒杀的效果,文章较长,请准备好瓜子板凳^_^本文所有涉及的代码:https://g...转载 2019-06-21 16:34:07 · 6417 阅读 · 3 评论 -
kafka+多线程实现案例+Callable
一,说明:1,消费组的概念:多个消费者组成,相当于一个线程池,初始化线程池,创建消费线程,统一消费方法2,多个消费者:每个消费者抽象为一个线程,实现Callable接口,可获取返回值,查看消费情况3,消费者:需要初始化,绑定与消费组ID,top,broker关系4,初始化线程池:核心线程池大小等于消费者数量5,call()执行内容:消费者消费内容,从kafka拉取消息,统计调用...原创 2019-07-01 16:59:00 · 891 阅读 · 0 评论 -
如果你这样回答“线程安全”,面试官都会对你刮目相看
不是线程的安全面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。同理,“线程安全”也不是指线程的安全,而是指内存的安全。为什么如此说呢?这和操作系统有关。目前主流操作系统都是多任务的,即多个进程同时运行。为了保证安全,每个进程只能访问分配给自...转载 2019-07-04 15:09:42 · 191 阅读 · 0 评论 -
Thread的run()与start()的区别
java的线程是通过java.lang.Thread类来实现的。VM启动时会有一个由主方法所定义的线程。可以通过创建Thread的实例来创建新的线程。每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。通过调用Thread类的start()方法来启动一个线程。在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 第一是创...转载 2018-11-12 10:01:39 · 482 阅读 · 0 评论