首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Java 程序死锁问题原理及解决方案

Java 语言通过 synchronized 关键字来保证原子性,这是因为每一个 Object 都有一个隐含的锁,这个也称作监视器对象。在进入 synchronized 之前自动获取此内部锁,而一旦离开此方式,无论是完成或者中断都会自动释放锁。显然这是一个独占锁,每个锁请求之间是互斥的。相对于众多高级锁 (Lock/ReadWriteLock 等),synchronized 的代价都比后者要高。但是 synchronzied 的语法比较简单,而且也比较容易使用和理解。Lock 一旦调用了 lock() 方法获取到锁而未正确释放的话很有可能造成死锁,所以 Lock 的释放操作总是跟在 finally 代码块里面,这在代码结构上也是一次调整和冗余。Lock 的实现已经将硬件资源用到了极致,所以未来可优化的空间不大,除非硬件有了更高的性能,但是 synchronized 只是规范的一种实现,这在不同的平台不同的硬件还有很高的提升空间,未来 Java 锁上的优化也会主要在这上面。既然 synchronzied 都不可能避免死锁产生,那么死锁情况会是经常容易出现的错误,下面具体描述死锁发生的原因及解决方法。

01

需要什么来解锁区块链和分布式应用程序的真正威力

最近有很多关于区块链未来的争议。 随着加密电子货币价格达到历史新高,总市值最近突破8000亿美元,每个人都想知道我们是否见证了互联网的第二次爆发或者有史以来最疯狂的泡沫。如果你问我,这两者都有一点。 今天,我们的区块链项目不仅仅是一个白皮书,而是几十亿美元的收益 - 没有产品,没有牵引力,只是一个想法和一些技术规范。你不需要在风险投资中理解这种投机水平是不可持续的。然而与此同时,我们在互联网的早期阶段也看到了很多,看看我们今天的位置。 我认为我们现在看到的加密货币疯狂正掩盖了底层架构和技术的许多潜力。

04
领券