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

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

image.png

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

不知道我说明白没

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题