Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我是否可以将main()方法声明为已同步,以避免.jar文件(仅由main()组成)同时执行两次?_Java_Multithreading_Java Threads - Fatal编程技术网

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

Java 我是否可以将main()方法声明为已同步,以避免.jar文件(仅由main()组成)同时执行两次?,java,multithreading,java-threads,Java,Multithreading,Java Threads,关于声明main方法已同步,我有以下疑问 阅读本次讨论: 我可以读到: 同步将防止执行多个实例 这可能是可取的 那么,这一断言的确切含义是什么 我试着做一个例子: 我有一个非常小的批处理应用程序,可以在数据库上执行一些操作。此应用程序主要由main()方法组成。我在一个可以执行的.jar文件中编译了它 这意味着将这个main()方法声明为synchronized我不能同时运行这个jar文件的两个实例?还是我遗漏了什么?不,那是不可能的。同步仅在同一程序执行中起作用。如果您启动一个jar两次,它

关于声明main方法已同步,我有以下疑问

阅读本次讨论:

我可以读到:

同步将防止执行多个实例 这可能是可取的

那么,这一断言的确切含义是什么

我试着做一个例子:

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


这意味着将这个main()方法声明为synchronized我不能同时运行这个jar文件的两个实例?还是我遗漏了什么?不,那是不可能的。同步仅在同一程序执行中起作用。如果您启动一个jar两次,它会启动两个不同的程序执行,每个程序都有自己的地址空间,它们不会共享任何对象或内存


如果要防止同一程序的多次执行,则需要具有外部锁定功能,例如锁定文件。

在使用synchronized关键字的diff 2 JVM中,同步是不可能的。你可以试试类似的东西


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

同步的范围不跨多个操作系统
进程
。因此,将main方法标记为synchronized不会达到预期效果。

我不能同时运行这个jar文件的2个实例吗?这听起来不对。如果您运行两次
jar
,它们将是独立的JVM。我会选择锁定文件解决方案