说男的上锁了是什么意思,男生有锁是什么意思

聚客2022-05-30  58

锁是什么意思(男生上锁了是什么意思) 文章目录
  • 问题的根源
  • 什么是锁?
  • 为什么有锁?
  • 私有制和公有制
  • 资源的稀缺和充足
  • 保证隐私
  • 和尚比肉多。
  • 为什么有锁?
  • 你有哪种锁?
  • 不谈质量公平锁和不公平锁要不要排队?
  • 虽然排队的人很多,但里面未必没有坑——乐观锁和悲观锁。
  • 入闸时,是否可以直接进入具体的入坑重入闸和不重入闸?
  • 一个坑只能蹲一个人。坑外洗手区呢——共享锁和独占锁?
  • 是要一直排队,还是去旁边先抽根烟——旋锁和自适应旋锁?
  • 没有打不开的锁。
  • 那些被忽视的锁
  • 最终关键字
  • 挥发性关键字
  • 公共、私人、受保护
  • 照片:公共厕所示意图
  • 问题来源
  • 还有一次面试,人家问我:说说锁的实现原理。我当时的反应是:小朋友,你是不是有很多问号?第一反应可以用某某的一首歌的歌词来形容:最想说的话应该从哪里说起?你和我想的一样吗?
  • 说说我为什么觉得自己有点傻。第一:在我的理解中,什么是原理,就是原来的理论,或者原来的真理。一个原理可以近似等于一个想法,不管谁持有这个原理,都可以实现。原因只有一个,但在千千实现的方式有成千上万种。第二:虽然面试的背景是Java语言环境,但是Java有很多锁。常见,即Synchronized关键字是否实现了锁?ReentrantLock是锁的一种吗?读写锁是锁的一种吗?第三,上面提到的三种锁在我看来也是不同类型和范围的不同实现方式,永远达不到原理层面。PS:我后来才知道,他想让我说同步是怎么实现的。
  • 昨天,我把这件事告诉了一个朋友。他认为我有点严肃。面试的时候,我想把对方想听的说出来,然后大家都同意了答案。说也奇怪,我问他,来,我们说说Java内锁的实现原理。哇,他马上开始讲同步的monitorenter和monitorexit指令,还有flag的ACC_SYNCHRONIZED标志。我也很迷茫。可能是我太固执了。只是我心里觉得概念和原理一定要明确,不能混淆。后来我不想再说什么了,就又问了朋友一个问题:好了,你说了这么多。我问你另一个问题:为什么有锁?到目前为止,我一直在和死神说话。其实我还有很多疑问:有没有万能锁无所谓?锁的作用是什么?如何实现自己的锁定?场景A需要锁吗?你为什么需要锁?你需要什么样的锁?多说无益,毕竟又在和死神说话。
  • 什么叫锁
  • 次元曰:“锁古为钥,今谓之锁。”“刺海”解释为“必须用钥匙免除的封印”。纵观历史,锁的出现是伴随着私有制的出现的。不知道有没有童鞋。我记得一篇中学文章《礼记·大同》里有一句“所以我不关外面的门”。如果不关,我们可以理解为不锁的意思。
  • 你想想,为什么家里的孩子都要锁起来?还是要给笔记本加开机密码——我觉得设置密码本质上就是锁定?什么情况没有锁?换个说法:什么情况不用锁?
  • 为什么会有锁 私有制和公有制
  • 回到大同,之所以不用上户,是因为这是大同社会。什么是大同社会,世界是公共的,就是资源属于大家,谁也没有权利也没有必要去锁定什么东西。PS:嗯,有点像共产主义。但是如果用一个Java关键字,大同就是公共的。
  • 资源的稀缺和充足
  • 想象一下为什么我们家有锁。我害怕小偷。如果他偷了什么,我不会让他偷的。他很有钱,我很穷。那个人为什么偷东西?因为他没有自己的资源。或者只有一个资源。如果你现在把它锁在家里,就意味着我不能拥有它。每个人都想要好东西。但是如果资源充足呢?就像我们常说的,现在有些人在路上看到一块钱都不会弯腰去捡。这时候他们打开就不想送人了,那为什么还要锁呢?
  • 保证隐私
  • 其实生活中还有一种情况,比如:小女孩在家换衣服,前门反锁,为什么要把孩子锁在房间里?所以有时候是锁着的,出于强隐私的需要,我在一个空房间里做了什么不想让别人知道。
  • 僧多肉少
  • 这和第二点有点不同。也就是说,虽然资源稀缺,现在你手里只有一两个师兄,但是你确定全世界只有你一个吗?这个时候需要锁吗?就像班上只有一个学生,你永远是第一。
  • 为什么会有锁
  • 因为有人在乎我的美,想拥有它。要么锁起来藏起来让我保持私密,要么杀一些人。当我不能用手杀死进程和线程的时候,我只能把自己锁起来。PS:说实话,锁定是一种牺牲自己,保护他人的手段。
  • 都有什么样的锁
  • 结束了。我要做出很大的牺牲。请看文末图片,公厕示意图。PS:历史上的博客都有说为什么我画的时候牺牲很大。
  • 讲不讲素质要不要排队—公平锁和非公平锁
  • 大家都在排队等着上厕所。你说你真的很着急。得了吧,有的人能压制别人。或者有个孕妇在烈日下排队。你觉得是不是该让这些着急的或者需要照顾的人做第一了?就是不让公平锁,管你什么,大家统一排队,先到先得。放手是不公平的锁定,看个人能力。有的人可能来了2个小时都没有一个坑位,有的人刚来的时候就有一个坑位。例如:ReetrantLock通过构造函数指定其公平性。如果公平,那么所有的线程都将加入队列,先入先出地等待。同步是不公平的。没有这样的队列。大家来了就抢门,谁狠谁蹲。
  • 虽然很多人排队,但里边未必没有坑位—乐观锁和悲观锁
  • 就像跟上厕所一样,有时候我只是下意识的看着很多人排队,然后我觉得里面没有坑,然后我就默默的加入后面的队伍,排队,排队。突然一个人没排队进去,然后XXX开门出来了。哈哈,其实很有可能没人用万能坑。或者大家都在排队洗手,或者所有的女同胞都在排队。其实作为一个男同胞,你有你自己的坑。同步是悲观的。只要有人从大门进去,里面一定没有坑。中科院认为很乐观。我们先去看看吧。有的人会老老实实排队,有的人会蹲着。在Java中,使用各种锁,而不仅仅是同步,这是一种悲观的态度。总有桀骜不驯的人想害我,我就先弄把锁自保。无锁编程是乐观的。虽然总有桀骜不驯的人想害我,但当他来害我的时候,我会再杀了他。通常,我集中精力练习我的超自然能力。
  • 进了大门,能不能直接进入具体坑位—可重入锁和不可重入锁
  • Trantlock和Synchronized是可重入锁。如图,三个坑,三把钥匙。只要拿到大门的钥匙,就可以进去蹲着。重新入锁就好了。试想一下,当你兴高采烈的拿到大门钥匙的时候,总觉得下一秒就能冲进去蹲着。谁知道,坑里有锁,坑里还有一堆人。这时候你只能说你完了,完了,尿裤子了,等着“si”吧。女票不可能在外面等你那么久,等着加班。哦,一切都结束了。
  • 一个坑位只能蹲一个人,那坑位外边的洗手区呢—共享锁和排他锁
  • 一个坑只能蹲一个人。你蹲,我就蹲不了。但是在洗手区,你洗,我洗,他洗,我们一起洗。ReentrantLock和Synchronized是互斥的。我带这个坑,所以你只能等。但是读写锁不一样。虽然我有大门的钥匙,但我只拥有这个坑。还有人想蹲着等,但如果只是想洗手,可以大胆的往前走。所以会经常发。一般来说,公厕不关大门,甚至没有大门锁,但每个坑都有关门和开门的概念。
  • 要不要一直排队等,还是先去旁边抽根烟—自旋锁和适应性自旋锁
  • 旋锁,就是你看着有人排队,然后你排队等到了一个坑,然后离开。在烈日或寒风中,你站在队列中,消耗着你的生命和体力。在程序中应该是要耗费CPU的,但是也有好处,你可以第一时间拿到坑位。自适应自旋锁,比如栗子:现在你看到三个人进闸入坑。这时,突然一个人出来洗手,她却突然又蹲进去了——传说中的偏锁。这个时候大家都会在这里等。希望不远了。—据说这是一把轻型锁。然而,我万万没想到。这个人也是蹲坑之王。你已经等了30分钟了,还没出来。等鬼了,我们不等Baxter.com了。然后喊:里面的战士,有坑就喊有坑,小的马上就来。-这似乎是一个重量级锁。这个时候有利有弊。好处是不用一直站着等,坏处是要来回跑。其实很难说哪个更消耗体力,要看等待的时间。
  • 有没有开不了的锁
  • 不知道有没有路过的勇者都经历过这么著名的一幕。厕所里面的人出不来,厕所外面的人进不来。大家一直在吵架。有些想蹲下不想蹲下的人被困在里面,有些刚进去洗手的人也被困在里面。我在春运的时候,在火车站经历了n次这样著名的场景。其实这是一把打不开的锁。而且除了有坑的门等有形的锁,还有想挤出去的人和想挤进去的人之间形成的无形的锁。同样,锁是一个抽象的概念,而不是一个具体的对象。在Java编码中,也是百平方网的那种。这并不一定意味着我们声明一个锁,例如,使用一个Synchronized或其他东西,这样锁就会出现。比如你明明没有声明锁,结果整个过程就陷入了僵局。所以哪里有资源竞争,哪里就只有锁,锁是一种保护机制。
  • 原则上没有打不开的锁,也没有一定要开的锁。根据锁定和获取锁的目的不同,可能会有不同的行为。问题是:你愿意放弃被锁定的东西吗?你愿意保护锁着的东西吗?锁定的东西能有完美的替代品吗?但是当一个线程必须完全得到被锁的东西,而被锁的线程又不愿意放手的时候,这就是一个打不开的锁——死锁。死锁有四个条件:互斥、请求和保持、非剥夺和循环等待。对于编程来说,是锁,不是死锁。对于人来说,是一个结,一个死结。只要任何一方愿意在任何一个环节做出让步,就没有打不开的锁。
  • 那些被忽略的锁
  • Synchronized和ReentrantLock是仅有的锁吗?那么CAS并没有被锁定的意思,但还是被锁定了。所以说到底,锁只是一个抽象的东西,只是一种约定:当我锁上它的时候,任何人都不允许破坏它。有把约定物质化的,也有放下的,看透的,不锁的。
  • final关键字
  • 不能修改由final关键字修饰的类、方法和变量。先不说什么是不能继承的,什么是不能改写和超载的。这个关键词真的太大了,太有同情心了。为什么这么说?这个资源是我的。插上国旗,落下自己的印记,成了我自己的。我本可以用栅栏把它锁上,不让别人拿到它。但是,我把资源放在保护套下,公开展示,允许你看,使用,甚至复制,只要你不破坏我的原貌。比如字符串,整数,数组,数学等等。,我所有的好东西都可以被大家看到,被大家使用。有时候,我们为什么要锁,其实是因为不想让属于自己的东西被别人涂改破坏。所以,保证私有制,有时候本质目的就是保证不变性。
  • volatile关键字
  • 如果最后一个关键词是慷慨和富有同情心,那么易变的关键词就像一个慈善家。别人的公厕只能在外面排队等,但是volatile的可以让你进洗手区等等。一旦有人出坑,你可以马上进去。又不是外面排队的人。就算有人出坑洗手,他还是在等,甚至原地爆炸以为里面没有可用的坑。善变是善良的人,但善良的人也是有底线的。底线是:当一个人想进入的时候,一个人必须先出去再进入。传说中的指令被重新编排。你是想说这个百特关键词解锁了吗?不一定。如果没有锁,为什么要先出去再进去?只是锁的不是那么明显。
  • public、private、protected
  • 这些访问控制关键字,就其对自身资源的开放程度而言,也可以是不同程度的锁。我不想。我突然很困,就去睡觉了。
  • 神图:公厕示意图

    本文地址:http://www.diemang.com/post/89489.html

    转载请注明原文地址:https://juke.outofmemory.cn/read/196728.html

    最新回复(0)