为什么不是一个等待响应中断的对象锁的线程?我做了一些搜索和阅读 interuppting blocked thread。 我理解像java中的参数,只有方法可以被迫抛出异常,并且同步的块不能被强制抛出异常等。但是这种等待锁定行为似乎是一个明显的死锁原因,所以为什么不能使语言规范使同步块抛出中断异常并让开发人员处理它?有没有强大的原因语言规范明智的不这样做?答案也表明中断不仅仅是停止/取消线程。如果那是为什么Lock.lockInterruptibly()稍后介绍?为什么不是一个线程正在等待响应中断的对象锁?
回答
关键字的整个关键点应该很简单(或者至少与多线程一样简单)。这在Oracle的Java tutorial on Lock objects明确陈述:
同步代码依赖于一种简单的可重入锁。这种锁很容易使用,但有很多限制。
java.util.concurrent.locks
包支持更复杂的加锁成语。
其中一个限制是缺乏中断等待线程的能力。
基本上,设计原则是,如果你只是需要最简单的互斥方式,是好的;如果您需要的东西超过最低限度,则需要使用其他更复杂的工具之一。
......因为这一切,你应该设计你的代码,以便任何线程永远不会持有一个“同步”锁,而不是更新几个字段。 –
我同意答案。我不会对这种行为感到困惑。 我不明白的是:这种“永久尝试锁定”行为似乎导致了轻松的僵局,没有恢复。我不能等待超时和中断。如果它是一个明显的死锁源,那么语言设计人员会想出办法。我能想到的一个解决方案是中断(假设中断是停止线程的最佳方式)。我想了解是否有强有力的理由说明为什么早期没有通过语言设计解决这个问题。或者可能是我的假设是错误的。 – Thiru
嗯,它只能一次访问多个锁,首先是死锁。语言设计者确实想到了一个办法:上述更复杂的构造。在很多情况下,你只需要一个简单的方法来自动设置某些字段,或者类似的简单方法,在这种情况下,拥有一个简单的构造就足以满足你的需要,而不是更多。 – yshavit
- 1. Java线程正在等待锁定不是(明显)锁定的对象
- 2. 什么是“等待线程”?
- 3. 获取锁对象线程正在等待
- 4. 等待的线程响应
- 5. 如何中断一个正在等待的C++ 0x线程?
- 6. 线程是否在锁FIFO上等待?
- 7. 线程等待一个锁,当它不应该
- 8. 对象在Android应用程序中等待之前未被线程锁定
- 9. Java:为什么这个线程在它已经拥有锁的时候等待?
- 10. 线程锁无限等待
- 11. 为什么主线程会等待
- 12. C++互斥锁 - 检查另一个线程是否正在等待
- 13. 为什么一个线程会中断另一个线程
- 14. 为什么我的XHR呼叫等待对方返回响应
- 15. 为什么Thread.interrupt()不能中断试图获取锁的线程
- 16. 几个线程可能在同一个对象上等待吗?
- 17. 为什么boost :: barrier等待不是中断点?
- 18. 为什么主线程在继续之前等待另一个线程完成?
- 19. 什么是等待,无法获得锁
- 20. 等待.NET线程启动的正确方法是什么?
- 21. 多个线程可以一次等待一个对象吗?
- 22. 保持线程等待窗体响应?
- 23. 什么是Python中的响应对象?
- 24. Android:java.lang.IllegalMonitorStateException:对象未被线程锁定之前等待()
- 25. 有关线程正在等待的对象的信息
- 26. 线程和正在等待
- 27. Android线程正在等待
- 28. 线程正在等待ThreadPoolExecutor
- 29. 等待ajax响应填充对象
- 30. 在java中等待客户端响应的正确方法是什么?
你能发布相关的代码吗? – Ali