
高并发&多线程
文章平均质量分 69
高并发&多线程
狂奔的蜗牛Evan
hello world
展开
-
redis 分布式锁的一些坑
在分布式系统中,由于 redis 分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了 redis 分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。今天我们就一起聊聊 redis 分布式锁的一些坑,给有需要的朋友一个参考:非原子操作使用 redis 的分布式锁,我们首先想到的可能是 setNx 命令。if(jedis.setnx(lockKey,val)==1){jedis.ex...转载 2022-03-02 09:36:32 · 412 阅读 · 0 评论 -
Java分布式锁三种实现方案
方案一:数据库乐观锁乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonus),有一个字段(left_count)记录礼物的剩余个数,用户每领取一个奖品,对应的left_count减1,在并发的情况下如何要保证left_count不为负数,乐观锁的实现方式为在红包表上添加一个版本号字段(version),默认为0。异常实现流程-- 可能会发生的异常情况-- 线程1查询,当前left_count为1,则有记录select * from t_bonus转载 2022-02-06 23:40:02 · 762 阅读 · 0 评论 -
深入理解TransactionTemplate编程式事务
Spring可以支持编程式事务和声明式事务。Spring提供的最原始的事务管理方式是基于TransactionDefinition、PlatformTransactionManager、TransactionStatus 编程式事务。而TransactionTemplate的编程式事务管理是使用模板方法设计模式对原始事务管理方式的封装。源码探索查看 TransactionTemplate.java 源码 1 2 3 4 5 6 7...转载 2021-10-22 19:06:53 · 2069 阅读 · 1 评论 -
异步处理返回结果(@Async+Future+AsyncResult使用场景)
场景从数据库查询信息,分批查询,50000个查询一次,再把每次查询结果汇总,如果分10次查询,正常查询每次返List<Product>,要等前一次查询返回结果后,才能执行下一次查询,汇总结果,是同步执行的过程。试想如果可以同时进行查询,之间互不影响,每个查询返回结构后,直接汇总,这样就大大节约了查询时间。AsyncResult作用就在这里。借用举例AsyncResult是异步方式,异步主要用于调用的代码需要长时间运行,才能返回结果的时候,可以不阻塞调用者。打个比方,同步方式就是.转载 2021-09-13 16:06:47 · 3516 阅读 · 1 评论 -
Java 中 Executors.newSingleThreadExecutor() 与Executors.newFixedThreadPool(1)有什么区别
在研究Executors提供的线程池时自然会想到标题这个问题,既然已经有了newFixedThreadPool,为什么还要存在newSingleThreadExecutor这个方法。难道newFixedThreadPool(1)不是只有一个线程(Single Thread)的?本文将通过分析JDK中的相关源码回答这个问题。源码分析写JDK代码的大佬们早就预料到了我们会有此疑问,在newSingleThreadExecutor给我们解释了一下:Unlike the otherwise equivale转载 2021-07-01 14:52:52 · 2348 阅读 · 2 评论 -
可重入锁详解(什么是可重入)
可重入锁详解概述什么是 “可重入”,可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。例如package com.test.reen;// 演示可重入锁是什么意思,可重入,就是可以重复获取相同的锁,synchronized和ReentrantLock都是可重入的// 可重入降低了编程复杂性public class WhatReentrant { public static void main(String[] args) { new Thread(new Runn转载 2021-04-25 17:04:25 · 894 阅读 · 0 评论 -
junit 调试时@test函数中的多线程如果没有特殊处理会立即结束
守护线程与非守护线程简单理解非守护线程不执行结束,程序就不会终止守护线程啥都不做,就是监控非守护线程,java进程剩下非守护线程时,进程就会关闭一般我们创建的多线程都是非守护线程.但是也有例外,例如在junit环境中 创建的多线程都变成了守护线程模式.所以测试时,就会搞不清状况: 为什么用了多线程,结果跑不出来,其实都是因为守护子线程没有运行结束, 测试进程就已经运行结束了.junit case 的特点编写junit 中的Test函数时, 如果用到多线程,主要注意@te转载 2020-11-30 17:48:07 · 2312 阅读 · 1 评论 -
Java中的ThreadLocal详解
Java中的ThreadLocal详解目录一、ThreadLocal简介 二、ThreadLocal简单使用 三、ThreadLocal的实现原理 四、ThreadLocal不支持继承性 五、InheritableThreadLocal类 六、从ThreadLocalMap看ThreadLocal使用不当的内存泄漏问题回到顶部一、ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使.转载 2020-11-24 23:33:47 · 709 阅读 · 0 评论 -
java线程池ThreadPoolExecutor类使用详解
在《阿里巴巴java开发手册》中指出了线程资源必须通过线程池提供,不允许在应用中自行显示的创建线程,这样一方面是线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销。而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池转载 2020-06-03 18:51:00 · 270 阅读 · 0 评论 -
响应速度不给力?解锁正确缓存姿势
阿里妹导读:响应时间长,遇到性能瓶颈时,开发者第一个想到的总是性能优化。《什么技能产品经理不会提,但技术人必须懂?》讲到了什么时候需要使用缓存。但缓存的用法是什么?一旦缓存使用不当,或稍有不注意,反而会翻车,导致系统投入更多的维护成本,陡增更高的复杂度。今天,科怀就来讲讲缓存的正确使用姿势。1. 常见概念在合理应用缓存前,需要了解缓存领域里相关的几个常用术语:1)缓存命中:...转载 2019-12-16 10:05:45 · 287 阅读 · 0 评论 -
java线程安全总结
最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣。已经拟好了提纲,大概分为这几个主题:java线程安全,java垃圾收集,java并发包详细介绍,java profile和jvm性能调优。慢慢写吧。本人jameswxx原创文章,转载请注明出处,我费了很多心血,多谢了。关于java线程安全,网上有很多资料,我只想从自己的角度总结对这方面的考虑,有...转载 2019-12-04 11:38:12 · 122 阅读 · 0 评论 -
别扯了,这才是应对高并发的正确处理思路!
别扯了,这才是应对高并发的正确处理思路!Java后端技术今天现在很多公司的招聘信息,都会有这这么一条要求:有分布式、高并发、高负载、高可用系统设计、开发和调优经验者优先。写这个岗位描述的HR,恨不得把自己知道的所有看上去高大上的词全都堆砌上,恨不得让别人一看就会认为这是一家巨牛X的公司。一提到高并发、分布式、高可用这些词,很多人都会不自然的想到新闻里阿里双11每秒创建几十万笔的交...转载 2019-11-27 11:50:36 · 302 阅读 · 0 评论