synchronized的底层JVM实现机制
来源:互联网 发布:拟态网络 编辑:程序博客网 时间:2024/06/05 16:59
Java synchronized 包含两方面的含义
互斥
JVM 通过对象锁来实现互斥:
协作是通过 Object wait, notify/notifyAll 方法实现的。
对应到JVM 的底层术语,这一机制叫做 monitor:
在不同区域的 Thread 对应的状态(Java Thread 的状态图):
在底层的JVM 或许会有更多的状态,但是,暴露在 Java Thread 的状态是在 java.lang.Thread 中定义的,注意 JDK 6 修订了 interrupt 的语义。
互斥
JVM 通过对象锁来实现互斥:
- typedef struct object {
- uintptr_t lock;
- Class *class;
- } Object
typedef struct object {uintptr_t lock;Class *class;} Object协作
协作是通过 Object wait, notify/notifyAll 方法实现的。
对应到JVM 的底层术语,这一机制叫做 monitor:
- typedef struct monitor {
- pthread_mutex_t lock;
- Thread *owner;
- Object *obj;
- int count;
- int in_wait;
- uintptr_t entering;
- int wait_count;
- Thread *wait_set;
- struct monitor *next;
- } Monitor;
typedef struct monitor {pthread_mutex_t lock;Thread *owner;Object *obj;int count;int in_wait;uintptr_t entering;int wait_count;Thread *wait_set;struct monitor *next;} Monitor;
在不同区域的 Thread 对应的状态(Java Thread 的状态图):
在底层的JVM 或许会有更多的状态,但是,暴露在 Java Thread 的状态是在 java.lang.Thread 中定义的,注意 JDK 6 修订了 interrupt 的语义。
比如,在底层,进行获取 lock 动作到获得 lock 之间有一小段状态叫做 BLOCKED:
- void monitorLock(Monitor *mon, Thread *self) {
- if(mon->owner == self)
- mon->count++;
- else {
- if(pthread_mutex_trylock(&mon->lock)) {
- disableSuspend(self);
- self->blocked_mon = mon;
- self->blocked_count++;
- self->state = BLOCKED;
- pthread_mutex_lock(&mon->lock);
- self->state = RUNNING;
- self->blocked_mon = NULL;
- enableSuspend(self);
- }
- mon->owner = self;
- }
- }
void monitorLock(Monitor *mon, Thread *self) {if(mon->owner == self)mon->count++;else {if(pthread_mutex_trylock(&mon->lock)) {disableSuspend(self);self->blocked_mon = mon;self->blocked_count++;self->state = BLOCKED;pthread_mutex_lock(&mon->lock);self->state = RUNNING;self->blocked_mon = NULL;enableSuspend(self);}mon->owner = self;}}
0 0
- synchronized的底层JVM实现机制
- synchronized的底层JVM实现机制
- synchronized的底层JVM实现机制
- synchronized的JVM底层实现
- synchronized的JVM底层实现
- JVM底层是如何实现synchronized的
- synchronized的JVM底层实现(很详细 很底层)
- JVM底层如何实现synchronized
- JVM底层如何实现synchronized
- JVM底层如何实现synchronized
- JVM底层又是如何实现synchronized的
- JVM底层又是如何实现synchronized的
- JVM底层又是如何实现synchronized的
- JVM底层又是如何实现synchronized的
- JVM底层又是如何实现synchronized的
- JVM底层又是如何实现synchronized
- JVM底层是如何实现synchronized---转
- Java并发机制底层——synchronized的实现原理
- 使用应用程式专用密码登陆Xcode
- HttpClient超时机制算法探讨
- 虚幻4的关卡动态加载机制
- Nginx + Tomcat 动静分离实现负载均衡
- java 字节流与字符流的区别
- synchronized的底层JVM实现机制
- gulp学习笔记
- launchOptions利用userActivity呼起app设置
- Maven Tomcat7自动部署
- Atomic与Volatile对比
- 第一章:开始
- JVM调优总结(十二)-参考资料
- Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC
- Java线程阻塞中断和LockSupport问题