• 2024-07-01线程池原理
    3线程池原理3.1ctlprivatefinalAtomicIntegerctl=newAtomicInteger(ctlOf(RUNNING,0));是原子变量,同时记录线程池状态和线程池线程个数以32位为例,高三位表示状态,后面表示个数3.2状态Running:接受新任务并处理阻塞队列里任务shutdown:拒绝新任务但是处理队列任务
  • 2024-04-08JUC:ThreadPoolExecutor线程池的使用方法
    文章目录ThreadPoolExecutor线程池状态构造方法Executors工厂方法newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutor提交任务方法关闭任务方法ThreadPoolExecutor线程池状态线程池用高三位表示状态,第一位为符号位。TERMINATED>TIDYING>STOP>
  • 2024-03-28java线程池原理浅析
     问题:查询大数据量的时候,例如一次返回50w数据量的包,循环去查询发现读取会超时。解决方案:经过思考采用多线程去分页查询。使用线程池创建多个线程去查询分页后的数据最后汇总一下,解决了一次查询大量数据返回超时的问题。一次查询现状:  多线程分页查询改造图: 
  • 2024-01-14JUC并发编程 CompletableFuture 获得结果和触发计算 常用方法(二)
    1获得结果和触发计算1.1获取结果publicTget()publicTget(longtimeout,TimeUnitunit)publicTjoin()--->和get一样的作用,只是不需要抛出异常publicTgetNow(TvaluelfAbsent)--->计算完成就返回正常值,否则返回备胎值(传入的参数),立即获取结果不阻塞1
  • 2023-12-12redis加锁逻辑分析
     publicbooleantryLock(longwaitTime,longleaseTime,TimeUnitunit)throwsInterruptedException{//省略部分代码time-=System.currentTimeMillis()-current;if(time<=0){acquireFailed(waitTime,unit,threadId);
  • 2023-11-02JUC并发编程学习笔记(四)8锁现象
    8锁现象八锁->就是关于锁的八个问题锁是什么,如何判断锁的是谁对象、class模板深刻理解锁锁的东西无外乎就两样:1、同步方法的调用者,2、Class模板。同一个锁中,只有当前线程资源释放后才会被下一个线程所接手。同步方法的调用者是两个不同的实例时,互不相关。静态同步方法(s
  • 2023-08-03巧用Redis实现分布式锁详细介绍_Redis
    目录前言手写Redis分布式锁Redissonlock()lock(longleaseTime,TimeUnitunit)tryLock(longwaitTime,longleaseTime,TimeUnitunit)RedLock红锁总结前言无论是synchronized还是Lock,都运行在线程级别上,必须运行在同一个JVM中。如果竞争资源的进程不在同一个JVM中时,
  • 2023-08-01限制IP对接口的调用频率_基于Redis实现
    pom.xml引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>逻辑代码 privatebooleanli
  • 2023-07-06如何使用Arduino创建摩尔斯电码生成器
    摩尔斯电码工作原理摩尔斯电码发明于19世纪,使用非常简单的长短脉冲序列(通常为电和划)来远距离发送消息。通过将字母表中的字母编码为电和划的组合,信息可以只用一个单一的电子或声音信号来表达。为了说明这是如何工作的,我们将使用一个简单的蜂鸣器将文本转换为可听的摩尔斯电码信
  • 2023-05-25Guava cache使用总结
    importcom.google.common.cache.CacheBuilder;importcom.google.common.cache.CacheLoader;importcom.google.common.cache.LoadingCache;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Random;importjava.util.concurrent.TimeUnit;
  • 2023-04-25okhttp3的基本使用(post发送json示例)
    依赖<!--https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp--><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><ve
  • 2023-04-16Redis分布式锁这样用,有坑?
    背景在微服务项目中,大家都会去使用到分布式锁,一般也是使用Redis去实现,使用RedisTemplate、Redisson、RedisLockRegistry都行,公司的项目中,使用的是Redisson,一般你会怎么用?看看下面的代码,是不是就是你的写法StringlockKey="forlan_lock_"+serviceId;RLocklock=redis
  • 2023-03-17Okhttp3中设置超时的方法
    场景SSM项目中使用Okhttp3请求接口,进行junit单元测试时提示连接超时:java.net.SocketTimeoutException 实现找到新建OkHttpClient对象的地方:OkHttpClientclient=newOkHt
  • 2023-01-30java 两个时间类型的参数相减,得到相差的天数
    如下代码演示当天时间减去一个时间参数获得两者之间相差的天数//获得Date类型的参数DatestartTime=entity.getCrateTime();DateendTime=newDate(System.currentT
  • 2023-01-21java for循环改造多线程-线程池原理
    通过ThreadPoolExecutor类自定义:publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,l
  • 2023-01-17Redis
    RedisTemplatetimeunit时间单位
  • 2022-12-27常见分布式锁的基本实现
     二、分布式锁应该具备哪些条件在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件:1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程
  • 2022-12-06Thread.sleep()和TimeUnit.SECONDS.sleep()的区别
    1、TimeUnit是什么?TimeUnit是java.util.concurrent包下面的一个类,TimeUnit提供了可读性更好的线程暂停操作。首先来看源码,原来是对Thread.sleep方法的包装,实现是一样的,只
  • 2022-12-02重试机制的实现(Guava Retry)
    重试机制的实现重试作用:对于重试是有场景限制的,参数校验不合法、写操作等(要考虑写是否幂等)都不适合重试。远程调用超时、网络突然中断可以重试。外部RPC调用,或者数据
  • 2022-11-04Caffeine 缓存
    简介在本文中,我们来看看 ​​Caffeine​​ —一个高性能的Java缓存库。缓存和Map之间的一个根本区别在于缓存可以回收存储的item。回收策略为在指定时间删除哪些对
  • 2022-10-25okHttp3集成
    Maven依赖pom:<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version></dependency>代码:pac
  • 2022-10-20BlockingQueue阻塞队列
    BlockingQueue阻塞队列BlockingQueue的四组API/**BlockQueue的四组API*1.抛出异常*2.有返回值,不抛出异常*3.阻塞等待*4.超时等待*/publicclassBlockQu
  • 2022-10-11时间转换工具
    /***毫秒转换为时间字符串*@parammilliseconds*@return*/publicstaticStringtimeStampToDhms(longmilliseconds){longday=TimeUnit.MILLISECONDS.toDa