锁
线程:程序进行内存操作的最小单元,且内存是共享的.
内存共享就会出现不同线程访问同一个个数据的问题 这时候就用到了锁的机制
什么是锁?
锁是控制多线程访问共享资源的工具,锁提供对共享资源的单独访问.
一般情况下,只有一个线程可以获取锁,对共享资源进行访问.
分类
1:synchronized 同步关键字 隐式锁 是JVM层实现的 使用的时候看不到.
2:jdk5 以后新增的Lock接口属于显示锁 代码中能看到 直接依赖于CPU指令和JVM无关
1:synchronized 同步关键字
.如果修饰成员对象 锁的就是对象
.修饰方法 锁的就是this 这个类的对象
.修饰静态方法 锁的对象的.class
流程:
1:线程执行了synchronized 的代码块 就自动上了锁 线程执行完就会释放锁
2:线发生异常时候自动释放锁.
问题: synchronized 锁 线程需要等待(IO或者sleep())的时候就阻塞了 没有释放锁 一直占用着资源 其他资源就需要一直等待,影响效率.
总结:synchronized关机字 锁 不能主动释放锁 只能代码块执行完或者异常才会释放锁 所以会导致资源浪费.
2:Lock 显示锁 和JVM无关 CPU指令直接分配