![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【并发】
文章平均质量分 80
程序猿微刊
立志当风华正茂,奋斗趁青春未老
展开
-
Java线城池详解
1、线城池介绍(1)降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场)(4)提供更强大的功能,延时定时线程池。2、线城池创建方法Executors是concurrent包下的一个类,为我原创 2022-04-13 22:50:42 · 632 阅读 · 1 评论 -
浅谈Java中的ThreadLocal
之前用过很多次TreadLocal,但是对其的理解并不是很深刻,通过查阅资料和阅读数据对它进一步的了解,谈一谈我对TreadLocal的理解,探讨一下使用方法和实现原理一.对ThreadLocal的理解ThreadLocal叫做本地变量,也可以叫做线程本地存储,它为变量在每个线程中创建一个副本,那么每个线程就可以访问自己内部的副本变量,即使两个线程同时执行这段代码,他们也无法访问到对象的ThreadLocal变量,本质上实现数据的隔离,避免不同线程之间访问变量产生冲突。理解误区需要强调的是,不能原创 2021-04-22 18:31:50 · 334 阅读 · 0 评论 -
QPS与TPS的区别
有很多人,自己TPS和QPS的关系都搞不清,对于开发和测试来说,知道这些参数都很重要TPSTPS:Transactions Per Second,意思是每秒事务数,具体事务的定义,都是人为的,可以一个接口、多个接口、一个业务流程等等。一个事务是指事务内第一个请求发送到接收到最后一个请求的响应的过程,以此来计算使用的时间和完成的事务个数。以单接口定义为事务为例,每个事务包括了如下3个过程:a.向服务器发请求b.服务器自己的内部处理(包含应用服务器、数据库服务器等)c.服务器返回结果给客户端如果每原创 2021-04-14 09:34:01 · 658 阅读 · 0 评论 -
Spring中@Async用法总结
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。 1. 何为异步调用? 在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行...原创 2019-12-18 10:07:20 · 516 阅读 · 0 评论 -
关于Java并发
1、产生并发的原因:cpu、内存、磁盘速度的差异,在硬件和软件方面解决速度差异引发的并发问题,cpu缓存->可见性,线程切换->原子性,编译优化->重排序,引发并发问题的根源。2、并发的解决:可见性解决方法->volatile、synchronized,原子性的解决方法->互斥锁,重排序->volatile,禁掉编译优化3、解决并发原子性产生的问题:...原创 2019-11-15 13:47:09 · 227 阅读 · 0 评论 -
一句话撸完重量级锁、自旋锁、轻量级锁、偏向锁、悲观、乐观锁等
重量级锁?自旋锁?自适应自旋锁?轻量级锁?偏向锁?悲观锁?乐观锁?执行一个方法咋这么辛苦,到处都是锁。今天这篇文章,给大家普及下这些锁究竟是啥,他们的由来,他们之间有啥关系,有啥区别。重量级锁如果你学过多线程,那么你肯定知道锁这个东西,至于为什么需要锁,我就不给你普及了,就当做你是已经懂的了。我们知道,我们要进入一个同步、线程安全的方法时,是需要先获得这个方法的锁的,退出这个...原创 2019-06-05 08:48:46 · 333 阅读 · 0 评论 -
JUC集合总体框架
List & SetJUC 集合包中的 List 和 Set 实现类包括: CopyOnWriteArrayList, CopyOnWriteArraySet 和 ConcurrentSkipListSet(基于 ConcurrentSkipListMap实现)。CopyOnWriteArrayListArrayList 的线程安全变体,其中所有可变操作(添加、设置等)都是通过创建...转载 2019-04-28 14:26:40 · 322 阅读 · 0 评论 -
关于同步工具类CountDownLatch
正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在Java并发中,countdownlatch的概念是一个常见的面试题,所以一定要确保你很好的理解了它。在这篇文章中,我将会涉及到在Java并发编 程中跟CountDownLatch相关的以下几点:目录CountDownLatch是什么? Cou...原创 2018-12-03 10:28:36 · 277 阅读 · 0 评论 -
关于多线程死锁、活锁、饥饿
死锁:1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完...原创 2018-11-07 21:50:47 · 512 阅读 · 0 评论 -
线程之守护线程(支持性线程)
Java分为两种线程:用户线程和守护线程什么是daemon线程?也可以称为守护线程,是一种支持性线程,主要用于程序中的后台调度及支持性工作主要用在什么地方? 比如垃圾回收就算一种守护线程需要注意什么?1). 因为是守护线程,或者说是支持性线程,就意味着这个线程并不属于程序中不可或缺的一部分。所以当所有的非守护线程(即用户线程)结束之后,程序就会结束,JVM退出,同时也就会杀死...转载 2018-10-30 22:58:14 · 319 阅读 · 0 评论 -
redis缓存穿透,瞬间并发,缓存雪崩的解决方法
一.缓存穿透: 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,造成缓存穿透。 解决办法: 1.布隆过滤 对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bit...原创 2018-10-25 17:22:44 · 327 阅读 · 0 评论 -
40个Java多线程问题总结
1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服转载 2018-10-16 10:16:54 · 280 阅读 · 0 评论 -
介绍new Thread的弊端及Java四种线程池的使用
1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub }}).start();那你就out太多了,new Thread的弊端如下...原创 2018-08-23 10:34:01 · 568 阅读 · 0 评论