Java 跨多个jvm锁定?

Java 跨多个jvm锁定?,java,locking,makefile,Java,Locking,Makefile,这有点关系 我用make来提取一些关于C程序的信息。我使用一个bash脚本来包装编译,该脚本运行我的java程序,然后运行gcc。基本上,我在做: make CC=~/my_script.sh 我想使用几个作业(-j选项与make)。它根据依赖关系规则运行多个进程 如果我理解得很好,我会拥有和作业一样多的jvm实例,对吗 问题是,我正在使用sqlite jdb收集一些信息。因此,问题是如何避免多个进程试图同时修改数据库? sqlite锁似乎是依赖于jvm的(我的意思是一个锁只能在锁定的jvm内

这有点关系

我用make来提取一些关于C程序的信息。我使用一个bash脚本来包装编译,该脚本运行我的java程序,然后运行gcc。基本上,我在做:

make CC=~/my_script.sh
我想使用几个作业(-j选项与make)。它根据依赖关系规则运行多个进程

如果我理解得很好,我会拥有和作业一样多的jvm实例,对吗

问题是,我正在使用sqlite jdb收集一些信息。因此,问题是如何避免多个进程试图同时修改数据库? sqlite锁似乎是依赖于jvm的(我的意思是一个锁只能在锁定的jvm内“看到”),对于RandomAccessFile.lock()也是如此

你知道怎么做吗?(创建一个tmp文件,然后查看它是否存在似乎是一种可能性,但可能很昂贵。dB中是否有锁定表?)


谢谢

有几种解决方案。 如果您的锁应该在同一台计算机中,则可以使用服务器套接字来实现它(管理绑定到端口的进程首先拥有锁,其他进程等待端口变为可用)

如果需要跨多台机器的锁,可以使用memcached锁。这将需要一个正在运行的服务器。如果您对此解决方案感兴趣,我可以粘贴一些代码

您可以让Java库连接到memcached。

允许操作系统级别的跨进程文件锁定


但是,在调用gcc之前,使用make启动一个并行运行多个JVM的bash脚本,对我来说,听起来太鲁比了,太脆弱了。

您可以尝试在不同的JVM实例之间共享对象。对于您的需求来说,这似乎是一个过于繁重的解决方案,但至少值得考虑。

喜欢参考资料。。。对我来说也太脆弱了。但是我必须捕获所有提供给gcc的参数,并且构建的系统非常复杂(构建系统也是如此),我没有太多选择。只需一个memcached服务器的指针就可以了,谢谢。更新了annswer以包含memcached和memcached java lib链接。