
并发
文章平均质量分 85
weixin_43751710
这个作者很懒,什么都没留下…
展开
-
为啥AtomicInteger底层用的volatile,但是可以进行++的操作呢
为啥AtomicInteger底层用的volatile,但是可以进行++的操作呢?众所周知,用volatile时,对volatile的操作最好不要涉及到volatile自身。但AtomicInteger它有一个方法incrementAndGet,它却可以对自己进行++。可以看到,它调用了unsafe的getAndAddInt,这个相当于乐观锁,比较内存中的内容是否一样,如果一样就改掉,这是...原创 2020-01-30 17:01:13 · 688 阅读 · 0 评论 -
静态类并发时的安全问题
https://www.cnblogs.com/panchanggui/p/9680694.html静态变量是非线程安全的1、静态变量:使用static关键字定义的变量。static可以修饰变量和方法,也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时...转载 2020-12-31 16:27:38 · 764 阅读 · 0 评论 -
线程的基本操作
线程启动start线程终止join说它是终止线程可能不是很准确,join的含义是:t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。线程等待唤醒wait线程唤醒notify线程睡眠sleep...原创 2020-04-11 11:45:01 · 270 阅读 · 0 评论 -
指令重排序(happens-before + As-If-Serial原则)
转自:https://segmentfault.com/a/1190000011458941https://blog.csdn.net/qq_19642249/article/details/81002210Java多线程可见性在现代操作系统上编写并发程序时,除了要注意线程安全性(多个线程互斥访问临界资源)以外,还要注意多线程对共享变量的可见性,而后者往往容易被人忽略。可见性是指当一个线...转载 2019-06-11 07:21:59 · 449 阅读 · 0 评论 -
线程安全在JVM中的体现
JVM线程安全问题转载 2020-04-10 10:29:38 · 354 阅读 · 0 评论 -
ArrayList、LinkedList、CopyOnWriteArrayList的区别联系
CopyOnWriteArrayList的实现原理内部数据会被copy读写分离可能的数据延迟CopyOnWriteArrayList用了一个有意思的技术实现了线程安全(不需要synchronization)。内部数据会被copy当调用这个类的任何有关修改的操作的时候(比如add,remove),CopyOnWriteArrayList里面整个的内容都会被重新copy一份。读写分离...转载 2020-04-03 19:58:08 · 741 阅读 · 1 评论 -
接口限流、服务降级、熔断
为什么需要限流与用户打交道的服务比如web服务、对外API,这种类型的服务有以下几种可能导致机器被拖垮用户增长过快(这是好事)因为某个热点事件(微博热搜)竞争对象爬虫恶意的刷单这些情况都是无法预知的,不知道什么时候会有10倍甚至20倍的流量进来,如果遇到此类情况,扩容是根本来不及的,弹性扩容也是来不及的;对内的RPC服务一个服务A的接口可能被BCDE多个服务进行调用,在B服务...转载 2020-04-02 21:13:44 · 5580 阅读 · 0 评论 -
线程池详解
转自:https://www.cnblogs.com/dolphin0520/p/3932921.html线程的优点:1、线程的无限制创建需要占用内存资源、消耗时间。而使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。线程池的构造方法:public ThreadPoolExecu...转载 2019-05-06 20:37:19 · 157 阅读 · 0 评论 -
Lock原理
Lock原理转载 2020-03-25 08:54:53 · 440 阅读 · 0 评论 -
CPU100%、CPU飚高、死锁、内存溢出的排查
CPU到了100%的排查方式top转载 2020-03-17 09:00:46 · 676 阅读 · 0 评论 -
Redis(分布式)缓存、本地缓存常见问题(缓存穿透、热key,缓存一致性)
啥是Redis的缓存穿透呢?缓存穿透,就是如果从数据库中查出的是null,存入Redis的就也是null,然后如果有人不停的查,就相当于是不停的查数据库,(因为是null,所以跳过了或者是透过了Redis),请求的多了可能就把数据库弄崩了。解决的办法,就是在查询数据库后,判断一下,如果为null,赋值空集合。(空集合不是null)List<Coupon> list = null;...转载 2019-12-15 21:43:17 · 407 阅读 · 0 评论 -
Netty的原理
Netty的原理转载 2020-03-13 17:59:27 · 275 阅读 · 0 评论 -
Zookeeper使用及原理
Zookeeper使用Zookeeper原理转载 2020-03-09 19:36:33 · 279 阅读 · 0 评论 -
synchronized锁的原理
Synchronized的底层原理,及简介https://www.cnblogs.com/mingyao123/p/7424911.html再一个补充:http://developer.51cto.com/art/201905/596986.htmlsynchronized的三种使用方法1.普通同步方法public synchronized void method1(){ …… };...转载 2019-10-27 15:40:28 · 219 阅读 · 0 评论 -
HashMap、Hashtable、ConcurrentHashMap的区别以及为什么线程安全?Redis的Hash和java的HashMap有啥区别?
HashMap和Hashtable的区别HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value...转载 2019-05-13 08:53:42 · 613 阅读 · 0 评论 -
死锁示例
## 死锁示例public class DeadLockTest { public static void main(String[] args) { C a = new C(); C b = new C(); A aClass = new A(a, b); B bClass = new B(a, b); ...原创 2020-03-07 12:31:34 · 120 阅读 · 0 评论 -
Redis并发问题及分布式锁,以及和Zookeeper的对比
Redis并发问题既然Redis是单线程,那么它为什么会有并发的问题。理论上来说,Redis是按顺序执行修改操作,不会有多个线程同时修改的情况。但假如有这种场景下:有一个字符串,key 为 a,value 为 1 。两个客户端同时对 a 进行加 1 。他们同时获取到 a 的值为 1 ,同时向Redis发出请求,将 a 值改为 2 。这样并发问题就产生了。Redis本身是按顺序执行的,它...转载 2020-03-05 10:30:07 · 555 阅读 · 0 评论 -
sleep与wait的区别
转自:https://blog.csdn.net/kangkanglou/article/details/82221301sleepsleep方法定义在java.lang.Thread中,作用于当前线程让当前线程休眠指定时间。休眠时间的准确性依赖于系统时钟和CPU调度机制。不释放已获取的锁资源,如果sleep方法在同步上下文中调用,那么其他线程是无法进入到当前同步块或者同步方法中的。...转载 2020-03-05 09:56:50 · 115 阅读 · 0 评论 -
死锁的形成及解决方法(如何排查死锁)
死锁的解决方法产生死锁的四个必要条件:(1) 互斥条件:资源不能共享,一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。1.安全序列我们首先引入安全序列的定义:所谓系统是安全的,是指系统中的...转载 2019-05-20 20:11:19 · 1403 阅读 · 0 评论 -
多线程实例
场景如下有多个品牌,每个品牌下有多个商品,现在要过滤掉其中没有商品的品牌。除了没有商品的可能,还有用户被屏蔽的可能,因此还有一道过滤逻辑。比如康师傅品牌下有康师傅红茶、康师傅方便面等等,盼盼品牌下啥也没有,就要把盼盼过滤掉,康师傅留下。过滤的线程如下//得到品牌下商品的个数class CountGoods implements Callable<Integer>{ ...原创 2020-03-02 12:37:18 · 138 阅读 · 0 评论 -
Callable实现阻塞的几种方法(Callable的阻塞机制示例)(线程池)
Callable是可以有返回结果的,但是我们必须要等到所有的Callable执行完成,即我们需要阻塞住主线程。但Callable是如果实现阻塞的呢?下面几个例子说明阻塞的方法,一共四种方式执行Callable线程列表使用线程池的submit方法但不调用get方法(不可行)线程池依次submit线程并依次调用get方法(不可行)线程池submit十个线程,并将返回的future加入一个列表...原创 2020-01-30 17:13:39 · 2555 阅读 · 0 评论 -
静态变量是非线程安全的
https://www.cnblogs.com/panchanggui/p/9680694.html静态变量是非线程安全的还有一点,静态方法中是不可以注入bean的因为静态方法的初始化是在注入bean之前进行的,因此注入的bean会是null。即注入不进去...转载 2019-10-27 17:42:21 · 642 阅读 · 0 评论 -
synchronized的使用方法(锁对象和类、锁静态方法、静态域)
synchronized的使用方法1.普通同步方法public synchronized void method1(){ …… };锁的是当前实例对象2. 同步方法块synchronized (this) { …… };锁是括号里面的对象,this就是当前对象了3.静态同步方法public static synchronized void method1(){ …… };锁...原创 2020-02-24 12:06:04 · 1079 阅读 · 0 评论