Java程序运行在【多线程】【多核心】时的一个疑问?
在 cpu
单核心情况下,jvm
多线程并发运行(交替运行),线程争抢 sync
锁是有前后顺序的,同步锁正常生效;但在 cpu
多核心情况下,jvm
多线程并行运行,当多线程同一时刻到达则以什么为标准判断哪个线程该获取锁呢?
回答
- synchronized锁定的是某个对象
- 对象是在堆内存中共享的, 不属于某一个线程, 也就是属于所有cpu内核共享访问
- 8个核同时到达synchronized块, 会进入锁定的对象的队列
- 同时到达的cpu核心的线程争抢对象锁, 哪个线程抢到了, 把自己的线程id登记到对象头
- 对象头有一个线程占用了, 别的线程就只能等咯
不知道我说明白没
synchronized的底层是使用操作系统的mutex lock实现的。
mutex也就是互斥锁,其使用sleep和wakeup原语,保证同一时刻只有一个线程进入临界区代码片段。至于系统允许哪个线程先进入临界区,这个得去看看操作系统原理了。
以上是 Java程序运行在【多线程】【多核心】时的一个疑问? 的全部内容, 来源链接: utcz.com/a/40955.html