死锁问题解决后,他获救了……

阿图涨工资了,这一天阿图很开心,面向工资编程,写代码的效率倍增,解决完自己的bug,还顺手帮同事排查了代码,甚至对公司一个摇摇欲坠的老项目,都忍不住动起了重构的歪心思。阿图异常活跃在每个同事的岗位上,同事们也喜闻乐见,只有阿图自己知道:“老子今天高兴,就想给你们提供免费劳动力!”。

结束了一天的忙碌,阿图从灯火辉煌的大楼里走出,身有疲惫,心却轻盈,盘算着晚饭吃点什么,来到路边的停车区,发现自行车被偷了。阿图顿时火冒三丈,找了一圈,一无所获,想牵走别人的车子,补偿一下,却发现上锁了。自行车是阿图最喜欢的交通工具,相比走路不显得太累,相比坐车又能兼顾健身,这个世界上没有比自行车更适合人类的发明了。这个世界上也没有比自行车更适合小偷偷走的了。这个世界上的阿图今晚丢了一辆自行车。这个世界上的阿图骂骂咧咧的步行回家。

阿图走了一条近道,因为施工的原因,这条道平时并不多走,但是选择这条路却可以早点吃上饭。夜晚的城市就是不夜城,没路灯的地方照样看到路。有的人喜欢唱歌壮胆,有人喜欢读诗壮胆,阿图就是后者,“会当凌绝顶,一览众山小,会当凌绝顶,一览众山小,会当凌绝顶,一览众山小……”,从逐渐加快的语速中可以听出,这不是读诗,倒像是在念咒语。突然咒语戛然而止,路面上空无一人,难道咒语生效,阿图穿越到泰山了?

“哎吆,哎……”,阿图在黑洞一样环境里痛苦的呻吟,阿图只记得身体突然失重,紧接着就是痛苦的闷响。这显然掉进井里了,也不知哪个缺德的偷走了井盖。几个深呼吸后,阿图恢复了神志,右腿火辣辣的疼,以致于忽略了身体其他地方的擦伤。刚熟悉了一种痛,动一下,一种新鲜的疼痛,从右腿袭来,简直不能呼吸。最要命的是手机也不知落哪了。几番挣扎后,阿图安静了下来。他要节省体力,寄希望路人能发现他。在井里,也不知过了多久,阿图无法入睡,只能回忆白天在单位加班写的代码,来打发时间。

有段代码,一运行CPU就急速飙升,用jconsole一查,果然出现了死锁,死锁代码如下:

 private static void test() {
        Object oa = new Object();
        Object ob = new Object();
        Thread thread1 = new Thread(() -> {
            synchronized (oa) {
                log.debug("lock A");

                synchronized (ob) {
                    log.debug("->lock B");
                    log.debug("work...");
                }
            }
        }, "thread1");


        Thread thread2 = new Thread(() -> {
            synchronized (ob) {
                log.debug("lock B");
                
                synchronized (oa) {
                    log.debug("->lock A");
                    log.debug("work...");
                }
            }
        }, "thread2");
        thread1.start();
        thread2.start();
    }

结果:

06:50:50.712 debug.TestDeadLock [thread1] - lock A
06:50:50.712 debug.TestDeadLock [thread2] - lock B

分析:

50秒thread1线程和thread2线程同时获得执行,在thread1线程中,锁A持有B锁,在thread2线程中锁B持有锁A,由于两个线程中的A,B锁都没有执行完成,没法释放给对方使用,因此会陷入互相等待的状态,这样就死锁了。

当发现有进程死锁后,解脱死锁的方法就是让进程获得资源。

阿图复盘的过程中,突然意识到自身的处境:自己有求救需求,可是没有电话,急救中心有电话,没有求救信号,这样就陷入了死锁。让进程获得资源,就是爬出去找到手机或找人求助。阿图这样想出神的时候,一滴雨啪嗒落在了脸上,阿图一个激灵振作了起来,忍着剧痛,抓着能抓的一切往上爬,不然雨一下大,就冲走了。后来终于努力爬出来,手机就在路面上,阿图得救了,在送往医院的路上,果然下起了大雨。

可是因为下雨,有的路已经堵了起来,阿图在心中默念,希望不要堵车,果不其然,堵车了。下雨天一旦有点小故障,堵上几公里是很正常的事情,阿图也安慰自己,只能等待命运的安排。然而,这时救护车警笛一响,方向盘一打,拐到另一条车流量较少的路上逆行。阿图凭借强大的理论自信立马意识到这不就是死锁吗?立马喝止司机师傅:"这样会堵死的",可是司机师傅还是拐上了逆行道,意想不到的是,在逆行路上,顺行的车辆像芝麻开花一样,45度停下,留出一条生命通道。司机师傅说,之所以会选择逆行,一是因为这条道车流量少,前方路口不足百米,二是之前那条道几公里的长龙,要是芝麻开花不知要开到啥时候,弄不好会添堵。阿图眼含泪水,感激并佩服司机师傅的胆大心细,更感谢哪些让出生命通道的陌生人们。理论知识能自救,但是在现实生活中能救人的还是温暖的人心。

阿图看着车窗外,有一个场景吸引了自己的注意,一个人,一手撑伞,一边骑行,除了胸前的背包没湿,其余部分都在滴水。这大概是一位正在下班路上的打工人,他的背包里肯定有比他生命更重要的东西。这多像自己,阿图看着雨水洗刷的窗外,模糊了双眼。自己来到这个城市有几年了,从刚开始充满干劲的毛头小伙,到现在两点一线的打工人。时间过得很快,就像这场大雨一样,下雨的时候整个城市轰隆隆,雨后却什么也没有改变。雨后的城市很干净,任何痕迹都不曾留下,哪怕是一辆自行车。人在受伤的时候就容易思乡,在家乡,我们跑,我们笑,我们一不高兴拔去路边的草,我们一旦高兴种满满园的花。我们可以在任何一个地方留下自己的痕迹,就好像插旗宣誓主权。我们有回忆,想要回到家乡,家乡有痕迹,需要我们回忆。在异乡,这种紧密的关系,像死锁一样僵持着,或许这就是乡愁吧。解锁方式,如歌词:

《故乡的云》

天边飘过故乡的云

它不停的向我召唤

当身边的微风轻轻吹起

有个声音在对我呼唤

归来吧 归来哟

浪迹天涯的游子

归来吧 归来哟

别再四处飘泊

踏着沉重的脚步

归乡路是那么的漫长

当身边的微风轻轻吹起

吹来故乡泥土的芬芳

归来吧 归来哟

浪迹天涯的游子

归来吧 归来哟

我已厌倦飘泊

我已是满怀疲惫

眼里是酸楚的泪

那故乡的风

和故乡的云

为我抹去创痕

我曾经豪情万丈

归来却空空的行囊

那故乡的风 和故乡的云

为我抚平创伤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值