Java程序运行在【多线程】【多核心】时的一个疑问?

cpu单核心情况下,jvm多线程并发运行(交替运行),线程争抢 sync锁是有前后顺序的,同步锁正常生效;但在 cpu多核心情况下,jvm多线程并行运行,当多线程同一时刻到达则以什么为标准判断哪个线程该获取锁呢?

回答

  1. synchronized锁定的是某个对象
  2. 对象是在堆内存中共享的, 不属于某一个线程, 也就是属于所有cpu内核共享访问
  3. 8个核同时到达synchronized块, 会进入锁定的对象的队列
  4. 同时到达的cpu核心的线程争抢对象锁, 哪个线程抢到了, 把自己的线程id登记到对象头
  5. 对象头有一个线程占用了, 别的线程就只能等咯

不知道我说明白没

synchronized的底层是使用操作系统的mutex lock实现的。

mutex也就是互斥锁,其使用sleep和wakeup原语,保证同一时刻只有一个线程进入临界区代码片段。至于系统允许哪个线程先进入临界区,这个得去看看操作系统原理了。

以上是 Java程序运行在【多线程】【多核心】时的一个疑问? 的全部内容, 来源链接: utcz.com/a/40955.html

回到顶部