封面下的同步

时间:2014-03-18 02:14:57

标签: java synchronization

我试图深入同步。

here,其中提到“每个对象都有与之关联的内在锁定”。

  1. 我理解Object类。它(我们很熟悉)没有任何像锁的属性(因此我猜它叫内在锁)。这个锁究竟是什么(即它是一个Lock.java类?它是某种隐藏的字段?)以及它是如何与一个对象相关联的(即有一些神秘的隐含引用来自对象的锁定,本机发生的事情)?

  2. When several threads try to acquire the same lock, one or more threads will be suspended and they will be resumed later.这些线程存储在哪里?什么数据结构保存等待线程的记录?

  3. 当等待很多人时,使用什么逻辑来挑选等待进入同步方法的线程?

  4. 从“synchronized keyword”到“内部锁定获取”的所有内容(逐步)的提法?

  5. 允许等待同步的线程数是否有上限?

1 个答案:

答案 0 :(得分:2)

1)是的,锁实际上是对象上的隐藏字段。除非通过同步,否则无法访问它。

2)等待线程基本上只是睡眠,直到锁定可用。它们不是“存储”在任何特殊位置,也没有可见的等待线程队列。隐藏了实施细节。

3)我认为没有任何承诺的订单。如果您明确需要循环调度或优先级或类似的东西,那么您有责任在同步锁机制之上实现它(或使用为您实现它的类)。

4)如果您了解这些信号量,可能会将其作为操作系统信号量处理。如果你不这样做,那么定义它们会让我觉得太多细节需要在这里正确处理......除非你重新实现它,否则你真的不需要理解它。

5)据我所知,没有明确的限制。 (我没有检查过官方的Java规范,但是我理解这种东西是如何在操作系统级别实现的。)当然,在某些时候你会耗尽系统资源,但我认为你通常会首先耗尽其他资源(比如内存来运行这些线程)。

另外一个注意事项:值得查看Atomic ...类。当这些可以使用时,它们在现代处理器中比传统的Java同步更有效。

相关问题