使用线程的数据报通道
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 在发送消息时已准备好接收消息。如果这没有帮助,请显示您的发件人和收件人代码。
【讨论】:
以上是关于使用线程的数据报通道的主要内容,如果未能解决你的问题,请参考以下文章