社区
进程/线程/DLL
帖子详情
如何实现Java中的synchronized?
lydmc
2007-06-07 03:59:02
初看synchronized觉得像Windows的临界区。
但当它内部有Wait语句时:
进入synchronized的范围时,则获取了this在这个线程的锁定。
而再进入了Wait状态时,会释放this在这个线程的锁定。
这个就不同于Windows的临界区了,临界区是不会被自动退出的。
请各位指教。
...全文
394
5
打赏
收藏
如何实现Java中的synchronized?
初看synchronized觉得像Windows的临界区。 但当它内部有Wait语句时: 进入synchronized的范围时,则获取了this在这个线程的锁定。 而再进入了Wait状态时,会释放this在这个线程的锁定。 这个就不同于Windows的临界区了,临界区是不会被自动退出的。 请各位指教。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
healer_kx
2007-06-08
打赏
举报
回复
信号灯,临界区就是信号灯实现的,好像。
希望能启发你一下了。
lydmc
2007-06-07
打赏
举报
回复
可能我没有说清楚:
[java]
class A{
public synchronized foo(){
...
wait(); // 这里如果进入等待,则释放this在这个线程的锁定
...
}
}
[c++]
...
EnterCriticalSection(&m_lock);
...
WaitforSingleObject(...); // 这里如果进入等待,并不会释放m_lock在这个线程的锁定
...
LeaveCriticalSection(&m_lock);
...
c++怎样实现类似java中“进入等待,同时退出临界区”的效果?
healer_kx
2007-06-07
打赏
举报
回复
信我,没错的,有本书讲C#的线程安全,就是用这样的代码作为讲解的。
healer_kx
2007-06-07
打赏
举报
回复
很简单,
就是临界区。
但是出于Java的描述,它应该是一个对象聚合一个临界区。
class MyClass {
private:
CRITICAL_SECTION m_cs;
};
然后在你想要实现synchronized的方法里使用临界区就可以了。
我认为楼上的代码,把public继承改成protected继承,就是完美的实现方式了。
珍惜生命远离CPP
2007-06-07
打赏
举报
回复
应该是这样的效果吧
仿照ATL中的东西
class MultiThreadLock
{
CRITICAL_SECTION m_lock;
protected:
typedef AutoLockT<MultiThreadLock> AutoLock;
public:
inline MultiThreadLock()
{
InitializeCriticalSection(&m_lock);
}
inline ~MultiThreadLock()
{
DeleteCriticalSection(&m_lock);
}
inline void Lock()
{
EnterCriticalSection(&m_lock);
}
inline void UnLock()
{
LeaveCriticalSection(&m_lock);
}
};
template<class T>
struct AutoLockT
{
inline AutoLockT(T* p):m_p(p)
{
m_p->Lock();
}
inline ~AutoLockT()
{
m_p->UnLock();
}
private:
T* m_p;
};
class test:public MultiThreadLock
{
typedef AutoLockT<test> AutoLock;
public:
void Do()
{
//do some ..
{
AutoLock lock(this);
//do some ..
}
//do some ..
}
};
Java
内核原理入门到实战(大神必经之路)
Java
语言是体系结构
中
立的:
Java
程序(后缀为
java
的文件)在
Java
平台上被编译为体系结构
中
立的字节码格式(后缀为 class 的文件),然后可以在
实现
这个
Java
平台的任何系统
中
运行。这种途径适合于异构的...
Java
中
Synchronized
的用法
synchronized
是
Java
中
的关键字,是一种同步锁。它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象; 3.修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象; 4..
Java
中
synchronized
的
实现
原理与应用
Java
中
的每一个对象都可以作为锁,而在
Synchronized
实现
同步的几种方式
中
分别为: 普通同步方法:锁是当前实例对象 静态同步方法:锁是当前类的Class对象 同步方法块:锁是
Synchronized
括号里配置的对象 任何一个对象都一个Monitor与之关联,当且一个Monitor被持有后,它将处于锁定状态。
Synchronized
在JVM里的
实现
都是基于进入和退出Monitor对象来
实现
方
【
java
】
java
关键字:
synchronized
详解
关键字:
synchronized
详解【
Java
】
Synchronized
有几种用法【
java
】 从hotspot底层对象结构理解锁膨胀升级过程【
java
】动态高并发时为什么推荐重入锁而不是
Synchronized
?请带着这些问题继续后文,会很大程度上帮助你更好的理解
synchronized
。
Synchronized
可以作用在哪里?分别通过对象锁和类锁进行举例。
Synchronized
本质上是通过什么保证线程安全的?分三个方面回答:加锁和释放锁的原理,可重入原理,保证可见性原理。
Java
虚拟机是怎么
实现
synchronized
的?
前言 本文隶属于专栏《100个问题搞定
Java
虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见100个问题搞定
Java
虚拟机 正文
Java
虚拟机
中
对
synchronized
关键字的
实现
,按照代价由高至低可分为重量级锁、轻量级锁和偏向锁三种。 当 JVM 检测到不同的竞争状况时,会自动切换到适合的锁
实现
,这种切换就是锁的升级、降级。 偏向锁 JVM 会利用 CAS 操作,在对象头上的 Mark Word 部分设置线程 ID,以表示
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章