转载:http://blog.csdn.net/sunp823/article/details/49886051 锁的状态:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。 偏向锁适用于只有一个线程访问同步块的场景。 轻量级锁的,竞争的线程不会阻塞,适用于持有锁的时间比较短。没有竞争到的线程会自旋 ...
分类:
编程语言 时间:
2017-04-14 12:54:03
阅读次数:
204
参考: http://www.360doc.com/content/12/0723/00/9298584_225900606.shtml http://www.cnblogs.com/biyeymyhjob/archive/2012/07/21/2602015.html http://blog.ch ...
分类:
系统相关 时间:
2017-04-08 11:01:01
阅读次数:
234
一、多线程安全隐患 资源共享 一块资源可能会被多个线程共享,也就是多个线程可能会访问到一块资源 比如多个线程访问同一个对象,同一个变量,同一个文件。 当多线程访问同一块资源的时候,很容易引发数据错乱和数据安全问题二、原子和非原子属性 1>OC 在定义属性的时候有nonatomic和atomic两种选 ...
分类:
移动开发 时间:
2017-03-30 17:03:33
阅读次数:
245
此篇博客所有源码均来自JDK 1.8
在线程获取同步状态时如果获取失败,则加入CLH同步队列,通过通过自旋的方式不断获取同步状态,但是在自旋的过程中则需要判断当前线程是否需要阻塞,其主要方法在acqu...
分类:
编程语言 时间:
2017-03-24 12:24:30
阅读次数:
227
StampedLock是Java8引入的一种新的所机制,简单的理解,可以认为它是读写锁的一个改进版本,读写锁虽然分离了读和写的功能,使得读与读之间可以完全并发,但是读和写之间依然是冲突的,读锁会完全阻塞写锁,它使用的依然是悲观的锁策略.如果有大量的读线程,他也有可能引起写线程的饥饿 而Stamped ...
分类:
编程语言 时间:
2017-03-20 19:00:17
阅读次数:
245
锁的简单应用 用lock来保证原子性(this.count++这段代码称为临界区) 什么是原子性,就是不可分,从头执行到尾,不能被其他线程同时执行。 可通过CAS来实现原子操作 CAS(Compare and Swap): CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间 ...
分类:
其他好文 时间:
2017-03-19 17:05:24
阅读次数:
290
一:悲观锁 悲观锁,就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁,加锁就会导致锁之间的争夺,有争夺就会有输赢,输者等待。 syncrhoized是一种独占锁,即:占用该锁的线程才可以执行,申请该锁的线程就只能挂起等待,直到占用锁的线程释放锁才唤醒,拿到锁并执行。由于在进程挂起和恢复 ...
分类:
编程语言 时间:
2017-03-16 21:25:52
阅读次数:
217
41、synchronized与Lock的区别 使用synchronized这个关键字实现的同步块有一些缺点: (1)锁只有一种类型 (2)线程得到锁或者阻塞 (3)Lock是在Java语言层面基于CAS自旋方式来实现锁的,在并发条件下,其性能要相对比synchronized好一些。 为了解决如上的 ...
分类:
编程语言 时间:
2017-02-28 19:21:50
阅读次数:
275
乐观锁 悲观锁 独占锁 共享锁 阻塞算法 非阻塞算法 自旋锁 AQS CLH队列锁 MCS队列锁 Ticket队列锁 SMP NUMA CAS ABA问题 原子变量:AtomicReference AtomicInteger AtomicReferenceFieldUpdater ...
分类:
编程语言 时间:
2017-02-25 15:56:44
阅读次数:
164
1.原子操作 - 概念:该操作绝不会在执行完毕前被任何任务或事件打断 - 使用注意:在原有的字符设备驱动的open函数中增加原子操作判断相关的代码,在关闭函数中释放原子操作。其余不变。也可以放在write中 - 相关api省略 2.信号量 - 概念:信号量在创建时初始化,表示同时有几个任务访问该信号 ...
分类:
其他好文 时间:
2017-02-17 00:05:12
阅读次数:
165