对于有 100 个并发用户登录的旅游预订 Web 应用程序, 订票和生成“电子客票号”应该用“同步”还是“静态同步”的方式实现?
最佳答案
那么,您知道静态方法和实例方法之间的一般区别吗?
synchronized
的唯一区别是,在 VM 开始运行该方法之前,它必须获得一个监视器。对于实例方法,获取的锁是与您调用该方法的对象关联的锁。对于静态方法,获取的锁与类型本身相关联 - 因此其他线程将无法同时调用任何其他同步静态方法。
换句话说,这:
class Test
{
static synchronized void Foo() { ... }
synchronized void Bar() { ... }
}
大致等同于:
class Test
{
static void Foo()
{
synchronized(Test.class)
{
...
}
}
void Bar()
{
synchronized(this)
{
...
}
}
}
通常我根本不使用同步方法——我更喜欢在私有(private)锁引用上显式同步:
private final Object lock = new Object();
...
void Bar()
{
synchronized(lock)
{
...
}
}
您没有提供足够的信息来确定您的方法应该是静态方法还是实例方法,或者它是否应该同步。多线程是一个复杂的问题 - 我强烈建议您阅读它(通过书籍、教程等)。
关于java - 同步和静态同步有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1536064/