首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

从死锁有关问题说起

2013-07-16 
从死锁问题说起java.lang.Thread.State: RUNNABLE?at StaticThreadInit1$1.run(StaticThreadInit1.java:7)

从死锁问题说起
java.lang.Thread.State: RUNNABLE?
at StaticThreadInit1$1.run(StaticThreadInit1.java:7)?
Locked ownable synchronizers:?
- None?

"main" prio=6 tid=0x002b9400 nid=0x17a8 runnable [0x0025f000]?
java.lang.Thread.State: RUNNABLE?
at StaticThreadInit1.<clinit>(StaticThreadInit1.java:10)?
Locked ownable synchronizers:?
- None

可以看到 另起的线程,名称为Thread-0 被锁定,而main 也被同样的锁锁住,并且一直在代码中的第10行执行,第10行代码就是 while循环。因此不能正常执行。

二:java的初始化

上面的枚举问题隐含着两个方面的内容

一:多个线程对同一个java类,接口执行初始化操作的时候,会进行同步,只有一个线程得到初始化的机会,其他线程只能进行等待,这正好是synchronized的使用场景,也在上面的枚举死锁问题得到了验证

二:静态属性值得获取会触发java初始化,同时不能正常执行的两个例子告诉我们 初始化的时候包含静态属性和静态代码块的初始化,那java的初始化到底包含哪些方面的内容呢?java的初始化又是按照什么顺序进行的初始化呢?下面说明这个问题。

从死锁有关问题说起

上面的代码执行下,然后分析下背后的原因。

如果有不明白的,可以看下 下面几篇文章,结合我上面的说明,应该就差不多了。

java类的初始化顺序,java对象初始化顺序,最权威的JLS初始化说明。

?

最后: ?

上面的枚举问题 简单一点就是一个牵涉到java初始化的 死锁问题。前文简单分析了下死锁的原因,同时将java初始化进行了一次的梳理。

热点排行