Java 我是否可以将main()方法声明为已同步,以避免.jar文件(仅由main()组成)同时执行两次?
关于声明main方法已同步,我有以下疑问 阅读本次讨论: 我可以读到: 同步将防止执行多个实例 这可能是可取的 那么,这一断言的确切含义是什么 我试着做一个例子: 我有一个非常小的批处理应用程序,可以在数据库上执行一些操作。此应用程序主要由main()方法组成。我在一个可以执行的.jar文件中编译了它Java 我是否可以将main()方法声明为已同步,以避免.jar文件(仅由main()组成)同时执行两次?,java,multithreading,java-threads,Java,Multithreading,Java Threads,关于声明main方法已同步,我有以下疑问 阅读本次讨论: 我可以读到: 同步将防止执行多个实例 这可能是可取的 那么,这一断言的确切含义是什么 我试着做一个例子: 我有一个非常小的批处理应用程序,可以在数据库上执行一些操作。此应用程序主要由main()方法组成。我在一个可以执行的.jar文件中编译了它 这意味着将这个main()方法声明为synchronized我不能同时运行这个jar文件的两个实例?还是我遗漏了什么?不,那是不可能的。同步仅在同一程序执行中起作用。如果您启动一个jar两次,它
这意味着将这个main()方法声明为synchronized我不能同时运行这个jar文件的两个实例?还是我遗漏了什么?不,那是不可能的。同步仅在同一程序执行中起作用。如果您启动一个jar两次,它会启动两个不同的程序执行,每个程序都有自己的地址空间,它们不会共享任何对象或内存
如果要防止同一程序的多次执行,则需要具有外部锁定功能,例如锁定文件。在使用synchronized关键字的diff 2 JVM中,同步是不可能的。你可以试试类似的东西
synchronized
将只允许一个线程拥有对象上的锁。这主要是为了保持数据的完整性
同步的范围不跨多个操作系统进程
。因此,将main方法标记为synchronized不会达到预期效果。我不能同时运行这个jar文件的2个实例吗?这听起来不对。如果您运行两次jar
,它们将是独立的JVM。我会选择锁定文件解决方案