java - Java NIO:两个线程之间的数据交换
问题描述
我想使用 Java NIO 实现两个线程之间的数据交换。这是我的代码:
测试.java
public class Test {
final static int BUFSIZE = 40;
private static Handler handler = new Handler();
public static void main(String[] args) throws Exception {
final Pipe pipe = Pipe.open();
new Thread(() -> {
ReadableByteChannel dst = pipe.source();
ByteBuffer buffer = ByteBuffer.allocate(BUFSIZE);
while (true) {
try {
while (dst.read(buffer) >= 0) {
buffer.flip();
String s = "";
while (buffer.remaining() > 0)
s = s + new String(new byte[]{buffer.get()});
buffer.clear();
System.out.println(s);
}
} catch (IOException ioe) {
System.err.println(ioe.getMessage());
}
}
}).start();
PackListener pl = packet -> {
WritableByteChannel src = pipe.sink();
ByteBuffer buffer = ByteBuffer.allocate(BUFSIZE);
buffer.clear();
buffer.put(packet.getBytes());
buffer.flip();
while (src.write(buffer) > 0) ;
src.close();
};
for (int i = 0; i < 3; i++) {
handler.execInterface(pl);
}
}
}
包监听器.java
public interface PackListener {
void doSmth(String packet);
}
处理程序.java
public class Handler {
public void execInterface(PackListener pl) {
String packet = "Hello:" + LocalDateTime.now().toString();
pl.doSmth(packet);
}
}
我预计三次:
Hello:2020-08-21T23:42:53.056
Hello:2020-08-21T23:42:53.057
Hello:2020-08-21T23:42:53.058
但我得到了:
Hello:2020-08-21T23:42:53.056
null
null
我在新的线程体中尝试了“while(true)”,但结果是一样的。
解决方案
推荐阅读
- xml - 使用 Powershell 构建基于 CSV 列表的 XML 文件
- ios - iOS CoreBluetooth scanForPeripherals()不显示设备
- azerothcore - 如何让 azerothcore 模块正常工作
- pycharm - Pycharm 中的 %load_ext rpy2.ipython 给出 SyntaxError
- javascript - 每次我运行我的应用程序时,“无法读取未定义的属性‘原型’”
- javascript - 如何正确模拟模块的方法?
- matlab - Matlab将补丁值转换为顶点值
- flutter - 未能提取清单
- python - 从字典列表和列表理解中生成数据框很慢
- algorithm - 如何通过投票找到相似用户