Reputation: 163
The project I am working on would trigger various asynchronous jobs to do some work. As I look into it more these asynchronous jobs are actually being run as separate JVMs (separate java processes). Does it mean I would not be able to use any of the following if I need to synchronize between these processes:
java.util.concurrent.locks
Because it seems to me they are all thread-level?
Does Java provide support for IPC like semaphores between processes?
Upvotes: 14
Views: 12202
Reputation: 10763
I'm using distributed lock provided by Redisson to synchronize work of different JVMs
Upvotes: 1
Reputation: 551
I have implemented a java IPC Lock implementation using files: FileBasedLock and a IPC Semaphore implementation using a shared DB (jdbc): JdbcSemaphore. Both implementations are part of spf4j.
If you have a zookeeper instance take a look at the Zookeeper based Lock recipes from Apache Curator
Upvotes: 1
Reputation: 340708
You can use synchronized
keyword, locks, atomic objects, etc. - but they are local to the JVM. So if you have two JVMs running the same program, they can still e.g. run the same synchronized
method at the same time - one on each JVM, but not more.
Solutions:
terracotta provides distributed locking
hazelcast as well
you can use manual synchronization on file system or database
Upvotes: 7
Reputation: 500167
they are all thread-level?
That's correct, synchronized
etc only work within the context of a single process.
Does Java provide support for IPC like semaphores between processes?
One way to implement communication between Java processes is using RMI.
Upvotes: 0
Reputation: 115328
That's right. You can not use any standard synchronization mechanisms because they are working into one JVM.
Solutions
Upvotes: 14