一:什么是线程安全 线程安全 就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全 就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据 如果你的代码 ...
分类:
编程语言 时间:
2017-03-26 17:20:27
阅读次数:
239
1.原子性的操作: CAS --CompareAndSwap(),指的是多个线程进入临界区域中,让多个线程在临界区域上自由的竞争,最后能够保证有一个线程能够胜出,其他没有竞争到的线程可以再一次尝试。最终临界区域上的所有线程都能够线程安全性的完成,这种方式,也叫无锁的方式,在之前的Synchroniz ...
分类:
编程语言 时间:
2017-03-23 01:23:56
阅读次数:
256
1、通过select for update或select for update wait或select for update nowait给数据集加锁 具体实现参考select for update和select for update wait和select for update nowait的区别 ...
分类:
数据库 时间:
2017-03-19 02:50:00
阅读次数:
175
一:悲观锁 悲观锁,就是不管是否发生多线程冲突,只要存在这种可能,就每次访问都加锁,加锁就会导致锁之间的争夺,有争夺就会有输赢,输者等待。 syncrhoized是一种独占锁,即:占用该锁的线程才可以执行,申请该锁的线程就只能挂起等待,直到占用锁的线程释放锁才唤醒,拿到锁并执行。由于在进程挂起和恢复 ...
分类:
编程语言 时间:
2017-03-16 21:25:52
阅读次数:
217
锁的优化策略 编码过程中可采取的锁优化的思路有以下几种: 1:减少锁持有时间 例如:对一个方法加锁,不如对方法中需要同步的几行代码加锁; 2:减小锁粒度 例如:ConcurrentHashMap采取对segment加锁而不是整个map加锁,提高并发性; 3:锁分离 根据同步操作的性质,把锁划分为的读 ...
分类:
编程语言 时间:
2017-03-16 20:13:27
阅读次数:
199
装饰器模式 动态的给原有对象添加一些额外的职责,面向切面编程(AOP),多用于和主业务无关,但又必须的业务,如:登录认证、加锁、权限检查等 Python代码实现示例 需求点: 1.在old_func()的输出前面输出Hello,everyone! 2.在old_func()的输出后面输出Thank ...
分类:
编程语言 时间:
2017-03-15 15:05:25
阅读次数:
182
读未提交的实现
对于读未提交隔离级别,此级别不会对记录加锁,有如下几种情况:
1
对系统表的数据操作,是数据引擎自己发出的数据查询操作,使用读未提交隔离级别,目的是不与其它事务因锁的存在...
分类:
数据库 时间:
2017-03-14 16:37:48
阅读次数:
644
1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在 ...
分类:
其他好文 时间:
2017-03-12 20:11:24
阅读次数:
160
MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思..
分类:
数据库 时间:
2017-03-12 11:53:29
阅读次数:
281
六,内存溢出 堆溢出 Java Heap Space,解决方法增大堆空间 永久区溢出 PermGen Space,增大Perm区,允许Class回收 栈溢出 直接内存溢出 七,内存溢出检查工具 -XX:+HeapDumpOnOutOfMemoryError JVM 就会在发生内存泄露时抓拍下当时的内 ...
分类:
其他好文 时间:
2017-03-09 18:41:52
阅读次数:
229