monstervivi 最近的时间轴更新
monstervivi

monstervivi

V2EX 第 360834 号会员,加入于 2018-11-05 08:55:11 +08:00
monstervivi 最近回复了
16 天前
回复了 balabalaguguji 创建的主题 推广 蹭一波双十一,免费送会员
- ID: 75626344
谢谢
91 天前
回复了 CraneLiu 创建的主题 微信 想弄个接活群
Java: bW9uc3Rlcl9oeHc=
117 天前
回复了 yezheyu 创建的主题 程序员 请教一个很基础的变量内存分配问题
推荐你看一下 CSAPP 的第三章,看完你就懂啦
上面回复中的「所以样式代码中的情况可能是:」少说了一点:7. 所以程序没有正常地结束。
死锁的定义:[死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象。]( https://baike.baidu.com/item/%E6%AD%BB%E9%94%81)

所以样式代码中的情况可能是:
1. 线程 t1 在第一个 synchronize block 中持有 String A monitor;
2. 线程 t1 sleep 2 秒;
3. 线程 t2 在第一个 synchronize block 中持有 String B monitor;
4. 线程 t2 在第二个 synchronize block 中需要获得 String A monitor,但此时的 String A monitor 被线程 t1 所持有,所以等待线程 t1 释放 String A monitor 。(如果是 JDK 6 以上,会进行锁膨胀,因为优化了 synchronize )
5. 线程 t1 sleep 2 秒后,进入第二个 synchronize block,此 block 需要获取 String B monitor,但此时的 String B monitor 被线程 t2 所持有,所以等待线程 t2 释放 String B monitor 。
6. 所以形成了死锁。

可以通过以下的方式,查看 DeadLock 的具体信息
1. 查看 DeadLockDemo 的程序 pid

```bash
jps
```

响应如下:
```bash
11094 DeadLockDemo
11100 Jps
```
2. 查看 DeadLockDemo 程序的 dump 信息

```bash
jstack -l 11094
```

可以看到最后的结果如下:

```bash
Found one Java-level deadlock:
=============================
"Thread-1":
waiting to lock monitor 0x00007fe08201aab8 (object 0x000000076aba4500, a java.lang.String),
which is held by "Thread-0"
"Thread-0":
waiting to lock monitor 0x00007fe08201bea8 (object 0x000000076aba4530, a java.lang.String),
which is held by "Thread-1"
```
220 天前
回复了 MoriartyCy 创建的主题 职场话题 千万不要随便裸辞,真是血的教训!
我刚裸辞,互勉。
258 天前
回复了 systemcall 创建的主题 问与答 大家会把键盘和显示器的中心对齐吗?
会!
338 天前
回复了 agriphar 创建的主题 Apple 有人用过 Notability 吗?
Mac 上的 notability,我只作为浏览
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1840 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
♥ Do have faith in what you're doing.