由于所有Java应用程序最终都是由JVM运行的,为什么JVM不能在运行时将单线程代码包装成多线程代码,具体取决于运行/访问部分代码的线程数.JVM肯定知道正在运行的线程数,它确实知道哪些类是线程,哪些代码可以被多个线程访问.
无法实施的原因是什么,或者是什么原因导致这种情况复杂化?
简单地在多个线程使用的任何内容上喷涂synchronized/volatile/Lock不会导致正确的多线程行为.例如,运行时如何知道锁的正确粒度?它会如何避免死锁?
早期的集合类,例如:Vector和Hashtable设计有一个类似的天真的并发视图.一切都是同步的.事实证明,你仍然可以很容易地陷入困境.例如,假设您要检查Vector是否包含至少一个元素,如果是,那么您将删除一个元素.每个对Vector的调用都会被同步,但是另一个线程可以在这些调用之间执行,因此你最终可能会遇到竞争条件错误.(当我之前提到锁的粒度时,这就是我所指的.)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |