我能否将 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,将达不到预期的效果。
我对声明 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,将达不到预期的效果。