使用线程的数据报通道

Posted

技术标签:

【中文标题】使用线程的数据报通道【英文标题】:Datagram Channel working with threads 【发布时间】:2015-01-12 13:50:58 【问题描述】:

我正在尝试设计一个系统,其中有一个发送者和一个接收者,双方都可以发送和接收数据包。我为每个发送者和接收者使用 2 个数据报通道,并在每一侧使用 2 个线程来处理。

从发送方向接收方发送数据可以正常工作,但是当我在接收方接收到该数据时,我想发回确认,但是我似乎无法在发送方接收。我的逻辑看起来正确吗?

以下是我的课程的详细信息:

线程类

Thread t = new Thread(new Sender())
Thread t1 = new Thread(new Receiver())
t.start()
t1.start();

发送者类

Sender implements Runnable
    //open  channel
    //connect to address
    //send over data in run method


Sender ACK class
    //open channel
    //connect
    //retrieve and get data received (WAITS For incoming data but data has already been sent)

接收器类

Receiver implements Runnable
   //open channel
   //bind
   //Print out data received
       //send ack


Receiver ACK class
    //open channel
    //connect
    //send ack method
      //send out data

【问题讨论】:

【参考方案1】:

我认为您需要某种同步来确保您的接收器已准备好接收消息。例如,您可以使用CountDownLatch

在您的 Sender 中,您应该 await() 并且 Receiver 应该在闩锁对象上调用 countDown()。 试试这个以确保您的 Receiver 在发送消息时已准备好接收消息。如果这没有帮助,请显示您的发件人和收件人代码。

【讨论】:

以上是关于使用线程的数据报通道的主要内容,如果未能解决你的问题,请参考以下文章

数据报通道套接字不写 Java

使用通道在线程之间传递Rust pnet数据包

Go笔记(十四):通道 channel

从 Netty 5 中的多路复用通道交付

并发——轻量级线程,通道,单向通道

RabbitMQ 和通道 Java 线程安全