我一次运行 2 个单独的 Java 应用程序。(两个单独的 javaw.exe) 我需要在它们运行时在它们之间共享一个对象。
在没有任何永久存储的情况下实现这一目标的最简单方法是什么?
我一次运行 2 个单独的 Java 应用程序。(两个单独的 javaw.exe) 我需要在它们运行时在它们之间共享一个对象。
在没有任何永久存储的情况下实现这一目标的最简单方法是什么?
对象及其实例变量可以在 Java 程序中的线程之间共享,这是非常简单的任务。
如果您需要在两个程序之间共享对象(它的实例),而没有数据存储,那么下一个选择是使用RMI 套接字通信或 Java 消息传递服务。
你可以使用 TCP
示例:http ://www.java-samples.com/showtutorial.php?tutorialid=1167
我认为Hazelcast适用于这种情况。它实际上不需要任何设置(除了您需要将依赖项添加到 Hazelcast jar 之外)。以下代码示例显示了如何设置共享Map
.
// Code in process 1
Config cfg = new Config();
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
Map<Integer, String> sharedData = instance.getMap("shared");
sharedData.put(1, "This is shared data");
// Code in process 2
Config cfg = new Config();
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
Map<Integer, String> sharedData = instance.getMap("shared");
String theSharedString = sharedData.get(1);
Hazelcast 支持各种共享数据结构,包括, , ,Map
等Queue
。List
文档很好,根据我的经验,实现是可靠的。AtomicLong
IdGenerator
您必须决定是否更喜欢共享和更新状态,或者只是发送一次性消息对象。
在第一种情况下,您必须共享某个对象的“远程引用”。RMI是一个很好的方法。
在第二种情况下,您只需要将要共享的对象序列化并发送即可。正如Ankit 所说,您可以通过套接字将其序列化(转换为字节)发送,甚至可以使用:
RMI :) 发送者连接到一个 RMI 注册的接收者,调用一个以消息对象作为参数的方法,然后忘记了 RMI 对象
Java 消息服务 (JMS),可能有点矫枉过正......
其他一些有创意但简单的事情......
如果您不能永久存储该对象,则需要以某种方式转移它。这可以通过网络或某种共享内存来完成。
对于第一种(网络)方法,使用序列化(java.io.Serializable)并通过套接字传输对象。这将需要编写套接字侦听器。
第二种方法需要使用和配置第三方库(例如EHCache)。
也许是甲骨文连贯性?这就像跨应用程序共享的内存映射。