我能否将 main() 方法声明为同步的,以避免 .jar 文件(仅由 main() 组成)同时执行两次?

Can I declare the main() method as synchronized to avoid that a .jar file (composed by only a main()) is executed twice at the same time?

我对声明 main 方法同步有以下疑问。

所以阅读这个讨论: Declaring the main method synchronized

我能读懂:

Being synchronized prevents multiple instances from being executed concurrently which might be desirable.

那么这个断言到底是什么意思?

我试着做一个例子:

我有一个非常小的批处理应用程序,可以在数据库上做一些事情。这个应用主要由main()方法组成。我编译成一个可以执行的 .jar 文件。

这意味着将此 main() 方法声明为 synchronized 我不能 运行 这个 jar 的 2 个实例同时归档?还是我遗漏了什么?

不,那是不可能的。同步只在同一个程序执行中起作用。如果你启动一个 jar 两次,它会启动两个不同的程序执行,每个程序都有自己的地址 space,它们不共享任何对象或内存。

如果你想防止同一个程序的多次执行,你需要有一些外部锁定的东西,例如一个锁定文件。

在 diff 2 JVM 中使用 synchronized 关键字无法同步。你可以试试

Prevent launching multiple instances of a java application

synchronized 将只允许一个线程拥有一个对象上的锁。这样做主要是为了保持数据完整性。

synchronized 的范围不跨越多个OSprocess。因此将main方法标记为synchronized,将达不到预期的效果。