如何在java应用程序之间共享对象?

如何在java应用程序之间共享对象?,java,object-sharing,Java,Object Sharing,我一次运行两个独立的Java应用程序。(两个单独的javaw.exe)在它们运行时,我需要在它们之间共享一个对象 在没有任何永久存储的情况下,最简单的方法是什么?它的工作原理类似于跨应用程序共享的内存映射。您可以使用TCP 使用本地软件端口,例如 本地主机:999 将一个应用程序设为服务器(侦听此端口),另一个设为客户端(将连接到localhost:999上的服务器,但将使用不同的端口供自己使用) 客户端将把对象序列化为流 服务器进行反序列化 示例:如果无法永久存储对象,则需要以某种方式进行传输

我一次运行两个独立的Java应用程序。(两个单独的javaw.exe)在它们运行时,我需要在它们之间共享一个对象

在没有任何永久存储的情况下,最简单的方法是什么?它的工作原理类似于跨应用程序共享的内存映射。

您可以使用TCP

  • 使用本地软件端口,例如 本地主机:999
  • 将一个应用程序设为服务器(侦听此端口),另一个设为客户端(将连接到localhost:999上的服务器,但将使用不同的端口供自己使用)
  • 客户端将把对象序列化为流
  • 服务器进行反序列化
    示例:

    如果无法永久存储对象,则需要以某种方式进行传输。这可以通过网络或某种共享内存来实现

    对于第一种(网络)方法,使用序列化(java.io.Serializable)并通过套接字传输对象。这将需要编写套接字侦听器


    第二种方法需要使用和配置第三方库(例如)。

    对象及其实例变量可以在Java程序中的线程之间共享,这是一项非常简单的任务。

    如果您需要在两个程序之间共享对象(它的实例),而不需要数据存储,那么下一个选择将是使用或Java消息服务。

    您必须决定是喜欢共享和更新状态,还是只发送一次消息对象

    在第一种情况下,您必须共享对某个对象的“远程引用”。这是一个好办法

    在第二种情况下,您只需要序列化要共享并发送的对象。您可以通过套接字将其序列化(转换为“是”),甚至可以使用:

    • RMI:)发送方连接到RMI注册的接收方,调用将mesasge对象作为参数的方法,并忘记RMI对象

    • Java消息传递服务(JMS),可能是一种过度使用

    • 其他一些有创意但简单的事情

      • 我认为这对这种情况很有效。实际上,它不需要设置(只需要将依赖项添加到Hazelcast JAR中)。下面的代码示例显示如何设置共享的
        映射

        // 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);
        
        //进程1中的代码
        Config cfg=new Config();
        HazelcastInstance=Hazelcast.newHazelcastInstance(cfg);
        Map sharedData=instance.getMap(“共享”);
        sharedData.put(1,“这是共享数据”);
        //过程2中的代码
        Config cfg=new Config();
        HazelcastInstance=Hazelcast.newHazelcastInstance(cfg);
        Map sharedData=instance.getMap(“共享”);
        String theSharedString=sharedData.get(1);
        

        Hazelcast支持各种共享数据结构,包括
        Map
        Queue
        List
        AtomicLong
        IdGenerator
        等。根据我的经验,该实现是可靠的。

        这非常有用。谢谢:)当然不会。然后应该有类似共享内存的东西。共享内存示例:hazelcast非常容易设置。但是,请注意潜在的限制(如超过150个成员的集群,或数据一致性)