首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java Synchronized如何比较锁定的对象?

Java Synchronized如何比较锁定的对象?
EN

Stack Overflow用户
提问于 2013-05-22 00:31:39
回答 2查看 2.4K关注 0票数 7

我想在多个API请求上锁定一个对象,这样每个用户只有一个请求可以进入一个代码块。

synchronized(obj)是根据对象的引用还是它的hashCode()函数锁定的?

例如,我可以这样做吗:

代码语言:javascript
复制
synchronized("asdf") {
    doSomethingNifty();
}

这里的"asdf“有一个唯一的散列,但没有唯一的引用。

EN

回答 2

Stack Overflow用户

发布于 2013-05-22 00:32:47

你正在同步一个对象,内存地址问题纯粹是一个实现问题,与你无关。只要它是相同的对象(指完全相同的实例),同步就完成了。

如果您使用不同的实例,同步将不起作用。你能做的就是定义一个公共静态常量作为锁:

代码语言:javascript
复制
public final static Object LOCK = new Object();

并使用它

代码语言:javascript
复制
synchronized(SomeClass.LOCK) {
票数 2
EN

Stack Overflow用户

发布于 2013-05-22 00:33:40

锁在对象本身的实例上,如果你想这样想的话,你可以把它看作内存位置。所以你的建议是行不通的。

相反,听起来你只需要有一个与你想要保护的代码块相对应的对象。因此,在您的程序的安装过程中,您需要如下内容

代码语言:javascript
复制
static Object lockObject = new Object();

然后你就可以

代码语言:javascript
复制
synchronized(lockObject) {
    doSomethingNifty();
}

但是,如果doSomethingNifty()与特定的对象相关,那么使用该对象而不是lockObject将非常有意义。还要确保doSomethingNifty()的执行速度很快,否则会有很多用户等待。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16675005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档