
多线程
文章平均质量分 81
学是为了不学
你学习吗?大家都在学习噢
展开
-
redis 分布式锁实现
3、锁可以续期,应该怎么续期?通过一个线程,比较锁key的对应的value(uuid)在一定时间内是发生变化(获取定时查看锁剩余时间,小于10s,重新设置时间,类似watch机制),执行三次即可;4、删除锁必须当前线程操作,threadlocal获取和存放的value值比较;5、删除锁之前的获取比较,和删除操作应该也是原子操作,建议使用lua脚本;2、可重入的问题:判断锁key的对应的value(uuid)是否相等;1、锁的获取和锁的过期时间设置需要原子操作;原创 2023-04-26 22:21:57 · 127 阅读 · 0 评论 -
synchronized原理:
抢占资源之前都先放到contentList,然后放到entryList,才有资格去获取锁,A线程执行monitorEnter,成功获取锁则对count+1,重入之后,继续累加,执行完任务之后【执行过程中,若调用await方法,则放进waitset集合内,需要被notify才行】,最后执行monitorExit进行释放锁。(1) 如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者。//处于wait状态的线程,会被加入到_WaitSet。原创 2023-04-22 17:28:09 · 482 阅读 · 0 评论 -
利用多线程实现报表的高效导出
报表的优化主要是涉及两个方面,一个是SQL和数据库层面的优化,另一个就是代码层面的优化了,本文主要讲述代码层面利用多线程处理的一点小总结。多线程实现的基础知识实现多线程的方式继承Thread类创建线程 实现Runnable接口创建线程 实现Callable接口创建线程 线程池的实现JDK自带的五种线程池的使用场景 newSingleThreadExecutor:一个单线程的线程池,可以用于需要保证顺序执行的场景,并且只有一个线程在执行。 newFixedThreadPoo转载 2021-07-05 23:29:06 · 466 阅读 · 1 评论 -
接口的幂等性,如何保证
最近跟朋友聊起这个话题,想深入了解下,于是学习总结,记录下来,此文章参考以下博客综合而来表示感谢:参考:分布式系统接口幂等性参考:高并发的核心技术-幂等的实现方案参考:什么是分布式系统中的幂等性1. 接口调用存在的问题 现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有可能在服务器处理完毕后返回结果的时候挂掉,这个时候用户端...转载 2021-06-08 23:39:38 · 713 阅读 · 0 评论 -
redis缓存和数据库双写一致性问题
今天陪大家来一起研究下redis缓存和数据库双写一致性问题我相信redis对于大多数程序猿并不陌生,大家在日常使用中肯定会遇到双写一直性问题,当然对于这个问题的解决方案大家肯定都各有见解,那么今天我就给大家总结一下常见解决方案先做一个说明,从理论上来说,给缓存设置过期时间,是保证最终一致性的终极解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然..转载 2021-06-08 23:38:05 · 348 阅读 · 0 评论 -
Spring中Bean的作用域、是否线程安全
Spring 的 bean 作用域(scope)类型 1、singleton:单例,默认作用域。 2、prototype:原型,每次创建一个新对象。 3、request:请求,每次Http请求创建一个新对象,适用于WebApplicationContext环境下。 4、session:会话,同一个会话共享一个实例,不同会话使用不用的实例。 5、global-session:全局会话,所有会话共享一个实例。Bean是否线程安全:最终回答:Spring中的Bean是否线程原创 2020-08-16 00:06:49 · 998 阅读 · 4 评论 -
volatile不能保证原子性,atomic不仅保证可见性还有原子性CAS分析
给一个变量加了volatile关键字,就会告诉编译器和JVM的内存模型:这个变量是对所有线程共享的、可见的,每次jvm都会读取最新写入的值并使其最新值在所有CPU可见。volatile似乎是有时候可以代替简单的锁,似乎加了volatile关键字就省掉了锁。但又说volatile不能保证原子性(java程序员很熟悉这句话:volatile仅仅用来保证该变量对所有线程的可见性,但不保证原子性...原创 2019-07-10 16:17:14 · 2183 阅读 · 2 评论 -
理解java线程的中断(interrupt)-总结的很到位啊
这个总结的可以:一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等。 所以你看到Thread.suspend, Thread.stop等方法都被Deprecated了那么不能直接把一个线程搞挂掉, 但有时候又有必要让一个线程死掉, 或者让它结束某种等待的状态 该怎么办呢?一个比较优雅而安全的做法是:使用等待/通知机制或者给那个线程一个中断信号, 让它自己决定该怎么办。等待/通过机制在另一篇博客中详细的介转载 2020-08-23 23:53:53 · 741 阅读 · 0 评论 -
AbstractQueuedSynchronizer的源码详解
一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。 以下是本文的目录大纲: 概述 框架 源码详解 简单应用 若有不正之处,请谅解和批评指正,不胜感激。转载 2020-07-09 11:53:25 · 240 阅读 · 0 评论 -
volatile不能保证原子性、atomic的比较,,cas分析
给一个变量加了volatile关键字,就会告诉编译器和JVM的内存模型:这个变量是对所有线程共享的、可见的,每次jvm都会读取最新写入的值并使其最新值在所有CPU可见。volatile似乎是有时候可以代替简单的锁,似乎加了volatile关键字就省掉了锁。但又说volatile不能保证原子性(java程序员很熟悉这句话:volatile仅仅用来保证该变量对所有线程的可见性,但不保...原创 2019-03-20 20:17:42 · 396 阅读 · 0 评论