一、单例模式的介绍 说到单例模式,大家第一反应应该就是--什么是单例模式?从“单例”字面意思上理解:一个类只有一个实例。所以单例模式也就是保证一个类只有一个实例的一种实现方法罢了(设计模式其实就是帮助我们解决实际开发过程中的方法,该方法是为了降低对象之间的耦合度。然而,解决方法有很多种,所以前人就总 ...
分类:
其他好文 时间:
2018-06-06 22:12:27
阅读次数:
146
三军可夺帅也,匹夫不可夺志也。———《论语》上一篇讲到同步容器类的潜在问题,可以通过两个方法解决。可以通过客户端加锁解决。可以使用并发容器类来解决问题。客户端加锁的方法我们已经知道,所以,这一篇介绍一下并发容器类原理,看它是如何解决这些问题的。下面看下并发容器的框架图:这里写图片描述我们从上图可以看到,它们分为五大类:Map, List, Set,Collection,Queue, 同步容器类都是
分类:
编程语言 时间:
2018-06-05 23:16:38
阅读次数:
250
多线程(理解) (1)Lock锁 为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock。 Lock: void lock(): 获取锁。 void unlock():释放锁。 ReentrantLock是Lock的实现类. (2)死锁问题的描述和代码体现 同步的弊端: A:效率 ...
分类:
编程语言 时间:
2018-06-03 21:36:20
阅读次数:
315
并行和串行执行 总结:线程有创建和上下文切换的开销。 ...
分类:
其他好文 时间:
2018-06-03 14:21:18
阅读次数:
163
悲观者与乐观者的做事方式完全不一样,悲观者的人生观是一件事情我必须要百分之百完全控制才会去做,否则就认为这件事情一定会出问题;而乐观者的人生观则相反,凡事不管最终结果如何,他都会先尝试去做,大不了最后不成功。这就是悲观锁与乐观锁的区别,悲观锁会把整个对象加锁占为自有后才去做操作,乐观锁不获取锁直接做 ...
分类:
其他好文 时间:
2018-06-02 16:34:37
阅读次数:
201
from threading import Thread,RLock import time mutexA=mutexB=RLock() #一个线程拿到锁,counter加1,该线程内又碰到加锁的情况,则counter继续加1, #这期间所有其他线程都只能等待,等待该线程释放所有锁,即counter... ...
分类:
其他好文 时间:
2018-06-01 20:40:07
阅读次数:
194
import threading,timenum=1lock=threading.Lock() #申请一把锁def run(): time.sleep(1) global num lock.acquire() #加锁 #python3里面不加也无所谓,python2里面要加锁 num+=1 lock ...
分类:
编程语言 时间:
2018-06-01 13:33:06
阅读次数:
166
1、线程锁 如果多个线程同时要修改一个数据的时候,可能会把数据覆盖,这个时候就要在改数据的时候加锁,只同时有一个线程在改这个数据,改完后再解锁。 在Python2里面要加锁,在Python3里面不用,因为Python3里面会自动加锁和解锁。 在Python2里面加锁的代码如下: 2、守护线程 把子线 ...
分类:
编程语言 时间:
2018-05-30 19:25:30
阅读次数:
278
一、何为死锁 采用多线程是为了改善系统资源的利用并提高系统的处理能力。然而,在实际使用过程中,会遇到新的问题——死锁。所谓死锁,就是多个线程因为资源竞争而造成的一种互相等待的状态,若无外力作用,这种状态会一直维持。 二、死锁的原因 举个死锁产生的例子: 三、如何避免死锁 1.加锁顺序(线程按照一定的 ...
分类:
编程语言 时间:
2018-05-30 19:25:13
阅读次数:
172
一、事务并发调度的问题 三级封锁协议 可见,三级锁操作一个比一个厉害(满足高级锁则一定满足低级锁)。但有个非常致命的地方,一级锁协议就要在第一次读加x锁,直到事务结束。几乎就要在整个事务加写锁了,效率非常低。三级封锁协议只是一个理论上的东西,实际数据库常用另一套方法来解决事务并发问题。 二、隔离性级 ...
分类:
数据库 时间:
2018-05-30 10:48:21
阅读次数:
213