如何使Thread构造函数从LinkedHashMap

时间:2018-03-26 12:08:54

标签: java multithreading networking distributed-computing

我正在为分布式系统模块工作,该模块涉及在Java中模拟带有多个线程的推送闲聊协议

我的程序采用邻接列表格式的.txt文件("节点:neighbour1,neighbour2等等"):

1:2,4,6
2:1,3,4,5
.
.
.

创建一个LinkedHashMap,其中K = node,V = String(所有邻居),如下所示:

{1=2,4,6, 2=1,3,4,5 ...}

更具体地说,LinkedHashMap有K = String,V = String。

从这个地图我可以使用Map方法map.keySet()创建一个包含节点的List,并使用map.values()方法创建一个带有邻居的单独列表。我还可以创建一个String类型的Array,或者是邻居的String []。

每个节点只能与其邻居通信,这些邻居在LinkedHashMap中被定义为值。

八卦(推送)协议: 假设一个节点最初具有该信息。被通知的节点将信息发送到随机选择的邻居,该邻居从其邻居集合中抽取(具有替换)。 初始节点必须通过单独的互连线程发送信息。当邻居从互连接收信息时,它与初始节点的作用相同。换句话说,它从其自己的一组邻居中随机选择一个邻居,并通过互连进一步发送信息。最终,每个人​​都有信息,协议终止。

我的问题如下: 给定LinkedHashMap,我如何在密钥的基础上实例化一个节点,以便每个节点知道它是谁的邻居?更直接地说,Node Thread的构造函数如何从LinkedHashMap中获取具有特定值的特定Key?

当我尝试这样的事情时,它会给我整个邻居列表,而不是那些特定于节点的列表。

public Node extends Thread {
    public Node(Integer ID, List<String> neighbors){
    }
}

*增加:**

我被要求澄清什么&#34;沟通&#34;暗示。请从Coursera中看到这段视频:

https://www.coursera.org/learn/cloud-computing/lecture/5AOex/1-2-the-gossip-protocol

1 个答案:

答案 0 :(得分:0)

如果要将键值对从Map传递给构造函数或方法,可以执行以下操作:

public Node extends Thread {
    public Node(Map.Entry<String, String> entry) {
        String id = entry.getKey();
        String neighbors = entry.getValue();

        // ...
    }
}

然后你可以按照你想要的方式调用它。

for (Map.Entry<String, String> entry : map.entrySet()) {
    Node node = new Node(entry);
}

Map.entrySet

Map.Entry