gpt4 book ai didi

java - 跨线程通信java

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:15 25 4
gpt4 key购买 nike

所以我是 Java 的新手,我做过一些 C 编程。我正在尝试创建一个虚拟节点网络,每个节点都需要是一个线程。这些节点只允许与它们的邻居节点通信。将有一个可以与任何节点通信的主节点,但节点必须相互通信才能返回主节点。主节点邻居可以与主节点通信。

我原本打算保留节点的数组列表,但后来我意识到所有节点都需要有自己的线程。

我的问题是如何在 Java 中的线程之间向前传递信息。我需要能够让主节点提供所有常规节点的位置信息。我需要常规节点能够将消息传递给它们的邻居常规节点。?

这里是我的 git 仓库,如果你想看看我现在开始的代码。

https://github.com/fieldju/cs372_project

在 C 中,我制作了一个程序,该程序使用管道让 children 相互交谈,服务器连接客户端,但在这个问题中,节点要进行 p2p 通信,因为它们中的大多数不能直接与主节点通信/服务器


只是为所有查看此内容并希望查看结果的人提供的更新。我启动并运行了节点并进行了通信,您可以在

查看代码

https://github.com/fieldju/cs372_project

我仍在处理距离 vector 和其他一些事情,但到下周末,所有事情都应该完成。

最佳答案

I was originally going to keep an array list of the nodes, but then I realized all the nodes needed to be there own thread.

你可以保留一个线程数组,它仍然会保持一个具有相同逻辑结构的每个节点的线程。

how do I pass information back in forward between threads in Java.

如果线程驻留在同一个进程中,那么套接字肯定是多余的。我会使用一个或多个 ConcurrentLinkedQueue推送/弹出消息的实例。

一个或几个实际上取决于您正在实现的通信类型。可能每个节点一个 ConcurrentLinkedQueue,因此节点将消息推送到队列并且每个节点都知道从哪里弹出消息。

一些实现提示

在一个类中封装所有用于路由消息的逻辑 - 让我们称这个类为 VirtualNetworkVirtualNetwork 处理 ConcurrentLinkedQueue 的所有实例,并为所有线程提供用于发送/接收消息的方法 API。使类 VirtualNetwork 的一个实例可供所有节点访问 - 通过在 Thread 构造函数上传递对它的引用。

这是您的类 NodeThread 的草图。请注意,类 VirtualNetworkMessage 是您必须自行实现的类。

class NodeThread extends Thread {

private int nodeId;
private VirtualNetwork network;

public NodeThread(int nodeId,VirtualNetwork network) {
this.network = network;
this.nodeId = nodeId;
}
public void run() {
/* when you have to send */
int nodeReceptor = this.nodeId -1; /* neighbor in the array of threads */
Message m = new Message(this.nodeId,nodeReceptor);
m.setContent(10);
network.send(m);

/* when you have to receive */
Message m = network.receive(this.nodeId);
/* it's your decision to implement this in a blocking way or not */
}
}

关于java - 跨线程通信java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6129286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com