首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android月球着陆器双同步

Android月球着陆器双同步
EN

Stack Overflow用户
提问于 2013-03-29 06:52:25
回答 1查看 77关注 0票数 0

我正在研究Java Lunar Lander示例(API-8版本)的一些LunarView代码。我注意到了这个奇怪的现象:

代码语言:javascript
运行
复制
public synchronized void restoreState(Bundle savedState) {
            synchronized (mSurfaceHolder) {
                        // ...
            }
}

为什么是双同步?first synchronize不是已经保证一次只能有一个线程进入这个方法吗?

EN

回答 1

Stack Overflow用户

发布于 2013-03-29 07:13:10

不是的。

内部synchronized块锁定在mSurfaceHolder对象上,而在方法上使用synchronized关键字则锁定在类实例本身。

synchronized关键字基本上类似于在instance对象上使用锁。

代码语言:javascript
运行
复制
public synchronized void doSomething()
{
    // Do some stuff
}

和……完全一样。

代码语言:javascript
运行
复制
public void doSomething()
{
    synchronized (this)
    {
        // Do some stuff
    }
}

锁定到一个对象意味着如果一段同步的代码在执行时锁定了一个特定的对象,那么任何其他同步的代码段(使用相同的对象作为锁)将不得不等待,直到第一个同步代码段完成。

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

https://stackoverflow.com/questions/15693559

复制
相关文章

相似问题

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