Java从不同类之间的另一个线程通知线程

时间:2014-12-15 14:15:44

标签: java sockets concurrency

下面的方法在'Controller'类的主线程上运行。它向服务器发送请求包以获取设备列表。

public List<Device> getDeviceList(){
   networkServer.sendMsg(deviceListReqPacket);
   //wait till response returns. ???
}

此方法在“Server”类中的另一个线程上运行,该类从服务器读取数据。

private void readDeviceList() {
    // read packet from socket 
    List<nwkDeviceInfo_t> listdevice = networkServerDriver.getDeviceLists(packet);

    }
}

如何使getDeviceList()方法等到,readDeviceList()方法构造listDevice.And获取listDevice对象?我有点困惑。我在尝试一些不可能的事情,或者我是以完全错误的方式做事?

1 个答案:

答案 0 :(得分:0)

如果您的实例(上述类)在同一个JVM上但在不同的线程中运行,请使用Java附带的blocking queues之一。 如果它们通过网络进行通信(例如HTTP等),则看起来读取将被阻塞,直到写入完成(并且实际上在另一侧接收)。因此,在这种情况下,您已经拥有了所需的行为。