如何解决Java NIO:两个线程之间的数据交换
我想使用Java NIO在两个线程之间实现数据交换。 这是我的代码:
Test.java
import .
PackListener.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);
}
}
}
Handler.java
public interface PackListener {
void doSmth(String packet);
}
我希望有3次:
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
我在新线程主体中尝试了“ while(true)”,但结果是相同的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。