并发_002 锁的概念

对象锁  针对独享,它只是在该对象的某个内存位置声明一个标志该对象是否拥有锁,所以它只会锁住当前的对象

类锁   锁住整个类,当有多个线程来声明这个类的对象时将会被阻塞,直到拥有这个类锁的对象被销毁或者主动是否了类锁

公平锁  多个线程在等待同一个锁时,必须按照申请锁的时间来一次获得锁

非公平锁 多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的的线程比先申请的线程优先获得锁(有可能会造成优先级反转或饥饿现象)

可重入锁 是指在同一个线程在外层获取锁的时候,在进入内层方法会自动获取锁

独占锁  是指该锁一次只能被一个线程所持有

共享锁  是指该锁可被多个线程所持有

互斥锁  概念似独占

读写锁  读写互斥,写写互斥,读不互斥

悲观锁  认为对于同一个数据的并发操作,一定是会发生修改的,哪怕没有修改,也会认为修改,悲观的认为,不加锁的并发操作一定会出问题

乐观锁  认为对于同一个数据的并发操作,是不会发生修改的,在更新数据的时候,会采用尝试更新,不断重试的方式更新数据,乐观的认为,不加锁的并发操作是没有事情的

分段锁  是一种设计,分段锁的设计目的是细化锁的粒度,当操作不需要更新整个数组的时候,就仅仅针对数组中的一项进行加锁操作

偏向锁  是指同一段同步代码一直被一个线程所访问,那么该线程会自动获取锁,降低锁的代价

轻量级锁 当锁是偏向锁时,被另一个线程所访问,偏向就会升级为轻量级锁,其它线程会通过自旋的形式获取锁,不会阻塞,提高性能

重量级锁 锁是轻量级锁的时候,另一个线程虽然是自旋,但自旋不会一直持续下去,当自旋一定次数的时候,还没有获取到锁,就会进入阻塞,该锁膨胀为重量级锁,重量级锁会让其它申请的线程进入阻塞,性能降低

自旋锁  指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU

猜你喜欢

转载自www.cnblogs.com/hpzhu/p/10162260.html