并发
冬子一定要努力
你可以菜,但不能不努力呀
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis分布式锁做切面,一个注解统一使用锁
1. 自定义注解import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@Retention(RetentionPolicy.RUNTIME)public @interface RedisLock { String[] keyPieces(); int expireTime() default 5;}2.aop切面@Slf4j@Aspect@Compone原创 2020-11-27 19:34:39 · 736 阅读 · 0 评论 -
并发扣减库存(小游戏抽奖使用)工作笔记自用
/** * 加载优惠券缓存 * * @param key 缓存key * @param expireTime 过期时间 s * @param supplier 数据源 * @return {@link java.util.List<CouponStockBO>} */ private List<CouponStockBO> loadCouponFormCache(String key...原创 2020-07-02 17:12:45 · 553 阅读 · 1 评论 -
总结redis最常被问到知识点
1.什么是redis? Redis 是一个基于内存的高性能key-value数据库。2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据.原创 2020-07-01 16:54:18 · 215 阅读 · 0 评论 -
Java并发编程系列——CountDownLatch、CyclicBarrier、Semaphore的使用
CountDownLatch 原理:初始化时需要设置一个count变量,await()方法会阻塞当前线程,当其他线程调用CountDownLatch的countDown()方法的次数等于count时,当前线程被唤醒。 适用场景:可用于等待多个线程完成操作之后,当前线程继续操作的场景。 public static void main(String[] args) { CountDownLatch countDownLatch = new CountDownLatch(3);原创 2020-05-11 09:59:51 · 188 阅读 · 0 评论 -
1.8并发编程CompletableFuture使用
1.超强文档学习:https://mp.weixin.qq.com/s/d_TzKlyxD0RoWb8-UPimSQ原创 2020-04-13 00:04:24 · 834 阅读 · 0 评论 -
并发执行查询汇总返回结果集
需求: 做数据统计,但是有的sql执行太慢。然后优化添加索引,再用线程池去执行各自sql。汇总结果集package com.jd.car.laserbeak.web.controller.consume;import com.google.common.util.concurrent.ThreadFactoryBuilder;import java.util.concurrent.*...原创 2020-03-23 11:21:36 · 1283 阅读 · 0 评论 -
Kafka
转自大佬:https://mp.weixin.qq.com/s/lWKaNfNm3T7URueUz0NguA什么是 KafkaKafka 是一个分布式流式平台,它有三个关键能力: 订阅发布记录流,它类似于企业中的消息队列或企业消息传递系统。 以容错的方式存储记录流。 实时记录流。 Kafka 的应用: 作为消息系统。 作为存储系统。 ...原创 2019-11-04 10:19:25 · 360 阅读 · 0 评论 -
死磕 Synchronized 底层实现(转)
转自大佬:https://mp.weixin.qq.com/s/4YdrzJLfnNAHHDTwWldQVg关于synchronized的底层实现,网上有很多文章了。但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结、照搬而成,难免有些错误;要么很多点都是一笔带过,对于为什么这样实现没有一个说法,让像我这样的读者意犹未尽。本系列文章将对HotSpot的synchronize...原创 2019-10-31 11:10:20 · 174 阅读 · 0 评论 -
线程池除了常见的4种拒绝策略,你还知道哪些?
来源 |http://rrd.me/en3Wp前言谈到java的线程池最熟悉的莫过于ExecutorService接口了,jdk1.5新增的java.util.concurrent包下的这个api,大大的简化了多线程代码的开发。而不论你用FixedThreadPool还是CachedThreadPool其背后实现都是ThreadPoolExecutor。ThreadPoolExecut...原创 2019-10-18 18:04:32 · 281 阅读 · 0 评论 -
线程池满了,记一次事故(并发时候,数据缺少)
并发时候,发现有数据丢失,修改策略。解决并发数据问题修改拒绝策略:排队等待执行。就不会出现丢了。之前是通过报异常,但是发现并发上来会出问题...原创 2019-10-17 18:49:51 · 849 阅读 · 1 评论 -
线程池(异步)的submit和execute方法区别demo
线程池的submit和execute方法区别线程池中的execute方法大家都不陌生,即开启线程执行池中的任务。还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果。下面简要介绍一下两者的三个区别:1、接收的参数不一样2、submit有返回值,而execute没有用到返回值的例子,比如说我有很多个做validation的task,...原创 2019-10-17 17:25:10 · 3073 阅读 · 0 评论 -
Redis数据结构底层探秘(转)
转大佬文章:备份学习https://blog.youkuaiyun.com/gao2175/article/details/91416598原创 2019-08-29 20:35:03 · 141 阅读 · 0 评论 -
Redis为什么会选择44作为两种编码的分界点?在3.2版本之前为什么是39?这两个值是怎么得出来的呢?
为什么会选择44作为两种编码的分界点?在3.2版本之前为什么是39?这两个值是怎么得出来的呢?1) 计算RedisObject占用的字节大小struct RedisObject { int4 type; // 4bits int4 encoding; // 4bits int24 lru; // 24bits int32 refcount; // 4byte...原创 2019-08-29 20:33:23 · 1407 阅读 · 9 评论 -
缓存三大问题解决方案(穿透,雪崩,击穿)
Redis 经常用于系统中的缓存,可以极大地提高了系统性能和效率,但同时也带来一些问题。一个是数据一致性问题。从严格意义上讲,只要使用缓存,就会出现一致性问题,这是无法解决的。另一个问题是本文将讨论的缓存穿透,缓存击穿和缓存雪崩,这三个问题不仅限于 Redis,其他缓存工具同样需要面对这三个问题。接下来我详细讲解这三个问题以及对应的解决方案。一、缓存穿透缓存穿透意味着当用户查询数据库不存在...原创 2019-08-26 15:08:56 · 178 阅读 · 0 评论 -
从源码的角度解析线程池运行原理(转)
在深入源码之前先来看看J.U.C包中的线程池类图:它们的最顶层是一个Executor接口,它只有一个方法:public interface Executor { void execute(Runnable command);}它提供了一个运行新任务的简单方法,Java线程池也称之为Executor框架。ExecutorService扩展了Executor,添加了操...转载 2019-06-10 21:45:22 · 159 阅读 · 0 评论 -
面试官:聊聊你对分布式锁技术方案的理解(转)
前言 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题。第一步,自身的业务场景: 在我日常做的项目中,目前涉及了以下这些业务场景: 场景一:比如分配任务场景。在这个场景中,由于是公司的业务后台系统,主要是用于审核人员的审核工作,并发量并不是很高,而且任务的分配规则设计成了...转载 2019-06-17 13:50:47 · 187 阅读 · 0 评论 -
ThreadLocal相关文章汇总(转)
1.一个小例子秒懂ThreadLocal使用及原理https://mp.weixin.qq.com/s/ran7v3QgTLu1yp87i0OrFg原创 2019-06-11 22:20:57 · 142 阅读 · 0 评论 -
锁(面试使用)
一,volatile https://blog.youkuaiyun.com/eff666/article/details/676406481.作用:多线程下,某一个线程修改一个共享变量的值,那么所有的线程都能读取到新的值。保证可见性。2.并发中内存模型:多线程下,每个cpu都会有自己的缓存,一般的共享变量都会在每一个cpu中缓存下来供使用。为了保证共享变量一致。使用lock和缓存一致性。lock...原创 2019-06-13 15:23:33 · 760 阅读 · 0 评论 -
线程个人总结(面试使用)
https://mp.weixin.qq.com/s/h6SMb1y7XVJa8jc-Xu3LYw 详解线程池https://mp.weixin.qq.com/s/AdxtmZcc93ZN9w-Kl3G7WQ 超强的个人理解线程池(大佬们的分享)一。创建线程的方式1.继承thread类创建线程,重写run方法2.实现runnable接口,重写run方法3.实现callabl...原创 2019-06-13 15:23:00 · 172 阅读 · 0 评论 -
并发(面试使用)
一。分布式中的三个锁基于 Redis 分布式锁实现“秒杀”(含代码)https://mp.weixin.qq.com/s/JaltkW9z7oAOMFxbec8a4whttps://mp.weixin.qq.com/s/TuAQHj2_VzXFGCvUfvTtiw史上最通俗分布式锁解读,看完不懂算我输https://mp.weixin.qq.com/s/NQuefbBGUIpOEg...原创 2019-06-12 22:44:09 · 225 阅读 · 0 评论 -
线程池源码分析(总结的真的很好很实用)
为什么要用线程池?简洁的答两点就行。 降低系统资源消耗。 提高线程可控性。 如何创建使用线程池?JDK8提供了五种创建线程池的方法:1.创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。2.(JDK8新增)会根据所需的并发数来动态创建和关闭线程。能够合理的使用CPU进行对任务进行并发操作,所以适合使用在很耗时的任务。注意返回的是F...转载 2019-06-17 21:31:17 · 244 阅读 · 0 评论 -
常用md5,cbc等加解密
package com.tqmall.pontus.common.utils;import com.google.common.base.Preconditions;import org.apache.commons.codec.binary.Hex;import org.apache.commons.codec.digest.DigestUtils;import org.apache...原创 2019-06-28 20:07:54 · 492 阅读 · 0 评论 -
分布式锁
01为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。由于系统有一定的并发,所以会预先将商品的库存保存在redis中,用户下单的时候会更新redis的库存。此时系统架构如下:但是这样一来会产生一个问题:假如某个时刻,r...原创 2019-08-07 11:36:47 · 440 阅读 · 0 评论 -
Java并发编程73道面试题及答案(转)
1、在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User)。任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bool on);true则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon()必须在Thread.start()之前调用,否则运行时会抛出异常。两者的区别:唯一的...原创 2019-08-19 10:42:11 · 226 阅读 · 0 评论 -
(转)Java并发编程:深入剖析ThreadLocal
https://mp.weixin.qq.com/s/o1lquDZpiJ7v3jAFL0c2vQ转载 2019-06-10 17:29:19 · 139 阅读 · 0 评论
分享