- 首页 > 经验知识 > >
从原则上说 , 没有开不了的锁 , 也没有一定要开的锁 。根据加锁的不同目的 , 和获取锁的不同目的 , 可以有分别不同的行为 。问题是:是否愿意放弃被锁住的东西?是否愿意去保护被锁住的东西?被锁住的东西是否能有个完美的替换品?但一个线程一定要完整获取被锁住的那个东西时 , 而锁住东西的那个线程不愿意放手时 , 这就是一把开不了的锁—死锁 。形成死锁的四个条件:互斥条件、请求与保持条件、 不剥夺条件、循环等待条件 。对于编程而言是锁 , 是死锁 。对于人而言 , 就是结 , 死结 。只要愿意有任意一方任意一个环节作出让步 , 都不会有开不了的锁 。那些被忽略的锁
- 难道只有Synchronized、ReentrantLock这呀那的才算是锁吗?那CAS也没个锁的意思 , 可也还是锁呀 。所以锁终归只是一种抽象的东西 , 只是一种约定:我上了锁 , 大家都不许破坏争抢 。有将约定实体化的 , 也有放得开看得透不搞锁的 。
final关键字
- final关键字修饰的类、方法、变量 , 不允许被修改 。什么不能被继承啊 , 什么不能被重写可以重载呀 , 咱们都先不说 。这个关键字 , 真是太大气也太慈悲了 , 为什么这么说呢 , 这资源是我的呀 , 我插上旗帜落下我自己的记号已经成为我独有的了 。我百思特网本可以通过围栅栏 , 加锁的方式让其他人都得不到 。但是 , 我把资源加上保护罩 , 公开陈列展出 , 允许你看 , 允许你用 , 甚至允许你山寨 , 只要你不破坏我原来的样子就可以了 。像String , Integer、Array、Math等 , 我所有的好东西 , 大家谁都可以看看 , 拿着用 。有时候 , 我们为什么要加锁 , 不过就是因为我不希望属于我的东西 , 被别人改动破坏 。所以 , 保证私有 , 有时候的本质目的其实是保证不可变就阔以了 。
volatile关键字
- 如果说final关键字大气又慈悲 , volatile关键字就跟个慈善家似的 。别人家的公厕只能在外边排队等 , 但volatile家的允许你进去洗手区域等 。一旦有人出坑 , 你立马就可以进去 。而不是像排队在外边的人一样 , 就算有人出了坑位在洗手 , 他也依然在等待 , 甚至是以为里边没有可用坑位而原地爆炸 。volatile是个善良的人 , 但善良的人也会有底线 , 底线就是:当一个人想进 , 一个人想出的时候 , 必须先出才能进 , 传说中的指令重排 。要说这个关键字没有锁么?不见得 。如果没有锁 , 为什么必须先出才能再进呢?只是锁的不那么明显 。
public、private、protected
- 这些访问控制关键字 , 从对自己所持资源的开放程度来说 , 也能是不同程度的锁 。不想说了 , 突然很困 , 睡觉来着的 。
神图:公厕示意图
【男生上锁了是什么意思 锁是什么意思】
推荐阅读