同步和静态同步有什么区别?

1 java multithreading synchronization

对于旅行预订网络应用程序,其中有100个并发用户登录,是否应通过"同步"或"静态同步"方法实现机票预订和生成"电子机票号码"?

Jon*_*eet 20

那么,您是否了解静态方法和实例方法之间的区别?

唯一的区别synchronized是,在VM开始运行该方法之前,它必须获取监视器.对于实例方法,获取的锁是与您调用方法的对象关联的锁.对于静态方法,获取的锁与类型本身相关联 - 因此没有其他线程可以同时调用任何其他同步的静态方法.

换句话说,这个:

class Test
{
    static synchronized void Foo() { ... }

    synchronized void Bar() { ... }
}
Run Code Online (Sandbox Code Playgroud)

大致等效于:

class Test
{
    static void Foo()
    {
        synchronized(Test.class)
        {
            ...
        }
    }

    void Bar()
    {
        synchronized(this)
        {
            ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通常我倾向于根本不使用synchronized方法 - 我更喜欢在私有锁引用上显式同步:

private final Object lock = new Object();

...

void Bar()
{
    synchronized(lock)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

您尚未提供足够的信息来确定您的方法应该是静态方法还是实例方法,或者它是否应该同步.多线程是一个复杂的问题 - 我强烈建议你阅读它(通过书籍,教程等).

  • 你的问题和重复它的评论都没有意义.如果Jon Skeet的优秀答案无法满足您的需求,请重新提出您的问题. (2认同)