
并发
gghh2015
这个作者很懒,什么都没留下…
展开
-
并发中锁的分类
1、自旋锁线程状态及上下文切换消耗系统资源,当访问共享资源的时间短,频繁切换上下文不值得。jvm使线程在没有获得锁的时候,执行空循环,循环几次之后,如果还没获得锁,再被挂起。2、阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间)时,才可以进去线程的准备就绪状态,转为就绪状态的所有线程,通过竞争,进去运行状态。3、重入锁支持线程再次进入的锁。4、读写...原创 2019-08-09 09:08:57 · 388 阅读 · 0 评论 -
ReentrantLock源码分析
首先,想先梳理一下自己看源码的目的,最近有篇文章特别火《程序员12小时惊魂记:凌晨迁移数据出大事故!》,里面强调了解决问题的能力很重要,这给我一种只看源码和设计模式关键时刻不给力的感觉,周末去看了鲁能和恒大的比赛,那种在瞬间做出决策的压力只会比事故现场更紧张,而且不能有一点犹豫。我想竞技体育的魅力,就在于此吧,要把所有的技能都训练到潜意识层面,才会在瞬间爆发出来。所以,要不断的研究不断的实践,弄懂...原创 2019-08-06 00:17:46 · 205 阅读 · 0 评论 -
偏向锁,轻量级锁与重量级锁的区别
转自:https://blog.youkuaiyun.com/choukekai/article/details/63688332锁的量级说明锁的竞争程度。偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程来访问它的时候。它是可偏向的,意味着,它现在认为只可能有一个线程来访问它,所以当第一个线程来访问它的时候,它会偏向这个线程,此时,对象持有偏向锁。偏向第一个线程...转载 2019-07-16 22:04:23 · 631 阅读 · 2 评论 -
并发容器1 vs 同步容器
并发容器:CopyOnWrite系列、 Concurrent系列、 BlockingQueue系列特点:每个并发容器的设计都不一样,根据具体场景设计,尽量避免使用锁。 CopyOnWriteArrayList内部持有一个ReentrantLock lock = new ReentrantLock(),读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array。只是在增删改上加锁,但是读不加锁,CopyOnWriteArrayList支持读多写少的并发情况。原创 2019-07-16 08:59:15 · 192 阅读 · 0 评论 -
Lock接口,和Synchronized区别,分布式锁
什么是锁:同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一个代码块只能有一个线程可执行,那么需要在某个地方做个标记,这个标记必须每个线程都能看到,当标记不存在时可以设置该标记,其余后续线程发现已经有标记了则等待拥有标记的线程结束同步代码块取消标记后再去尝试设置标记。这个标记可以理解为锁。在单进程情况下,多个线程访问同一资源,可以使用synchronized和lock实现。在多进程情况下...原创 2019-07-13 19:34:34 · 3945 阅读 · 0 评论 -
String,StringBuffer与StringBuilder的区别|线程安全与线程不安全
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容转载 2017-10-10 19:23:37 · 502 阅读 · 0 评论 -
Java分布式锁看这篇就够了
原文出自:https://www.cnblogs.com/seesun2012/p/9214653.html https://blog.youkuaiyun.com/seesun2012### 什么是锁?在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。而同步的本质是通过锁来实现的。为了实现多个线程在...转载 2019-07-13 18:40:30 · 888 阅读 · 0 评论 -
java并发-独占锁与共享锁
转自:https://blog.youkuaiyun.com/wojiushiwo945you/article/details/422929991 锁的独占与共享 java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享...转载 2019-06-28 09:21:11 · 6520 阅读 · 0 评论 -
java并发等待/通知的经典范式
分为两部分,等待方和通知方:等待方:(1)获取对象的锁(2)如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。(3)条件满足则执行对应的逻辑。对应伪代码:synchronized(对象) { while(条件不满足) { 对象.wait(); } 对应的处理逻辑}通知方:(1)获得对象的锁(2)改变条件(3)通知所有等待在对象上的线程对应的伪...原创 2019-06-14 11:26:40 · 353 阅读 · 0 评论 -
JMM-java内存模型
在并发编程中,需要处理的两个关键问题:1、线程之间如何通信。2、线程之间如何同步。线程之间的通信机制有两种:1、共享内存。2、消息传递。共享内存的并发模型里,线程之间共享程序的公共状态,通过读-写内存中的公共状态进行隐式通信。消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式通信。JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程...原创 2019-05-03 17:12:04 · 247 阅读 · 0 评论 -
java并发机制的底层实现原理
java中使用的并发机制依赖于jvm的实现和cpu指令。原创 2019-03-04 09:21:28 · 209 阅读 · 0 评论 -
Java常用并发类
转自:Java并发包类源码解析 第一章 Java常用的并发类 注:本系列博客主要参考于《分布式Java应用:基础与实践》,林昊 著1、常用的并发集合类ConcurrentHashMap:线程安全的HashMap的实现CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayListCopyOnWriteArrayS转载 2018-01-23 00:08:19 · 961 阅读 · 0 评论 -
Java编程思想-并发-终结任务
1、编程思想电子版724页原创 2017-12-08 08:59:26 · 237 阅读 · 0 评论 -
Java编程思想-并发-基本的线程机制/共享受限资源
1、编程思想电子版699页:public class SelfManaged implements Runnable{ ..... public SelfManaged(){ t.start();} .....}1)创建线程,这与从Thread继承并没有什么特别的差异,只是语法稍微晦涩一些。但是,实现接口还可以继承不同的类,原创 2017-12-06 19:45:12 · 184 阅读 · 0 评论 -
java多线程并发去调用一个类的静态方法安全性探讨
原文:http://blog.youkuaiyun.com/weibin_6388/article/details/50750035这篇文章主要讲多线程对静态方法访问的数据安全性总结如下:1,java在执行静态方法时,会在内存中拷贝一份,如果静态方法所在的类里面没有静态的变量,那么线程访问就是安全的,比如在javaee中服务器必然会多线程的处理请求此时如果设计全局需要调用的静态方法,可用此种设计。2,java在转载 2017-11-25 15:53:07 · 1513 阅读 · 0 评论 -
高并发的一点儿小认识
参考:[关于java高并发的一些感悟和经验已经我自己找的资料](http://blog.youkuaiyun.com/u010523770/article/details/51866058)1:什么是高并发?什么是高并发,比如从网上下载一个电影,全国有很多人同时在下载这个电影。比如某个淘宝店铺,有很多店员,某个用户买了这个店铺的商品,多个店员同时去处理这个订单。从程序的角度来讲,高并发,就是很多人同时访原创 2017-10-03 13:08:59 · 278 阅读 · 0 评论 -
volatile和synchronized
如何把非原子性操作变成原子性操作?1、volatile关键字只能保证可见性,并不保证原子性2、synchronized关键字,使操作具有原子性区分一下synchronize内置锁和互斥锁1、内置锁,在对象头,自动获取释放,获得的唯一方式,进入锁保护的同步代码块2、互斥锁,内置锁就是一个互斥锁,当有多个线程获取锁时,只有一个能获取成功,其他线程阻塞等待。synchronized修饰范围...原创 2019-08-07 09:34:28 · 154 阅读 · 0 评论