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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...