gpt4 book ai didi

Java "conversation"2 个线程之间 : Piped Input/Output streams

转载 作者:行者123 更新时间:2023-11-30 05:05:15 25 4
gpt4 key购买 nike

我想知道您认为实现两个线程交换字符串并相互响应的程序的最佳方法是什么。

我无法让它工作,无论是使用 java.nio.Pipe 还是 java.io.PipedInputStream/java.io.PipedOutput.Stream

这是我想要做的代码示例:

主类,设置一切。

public static void main(String[] args) {
// TODO
// Create two communication channel, and bind them together

MyThread t1 = new MyThread(channel1Reader, channel2Writer, 0);
MyThread t2 = new MyThread(channel2Reader, channel1Writer, 1);

t1.run();
t2.run();

}

线程类:

public class MyThread extends Thread {
private ? inputStream;
private ? outputStream;
private boolean canTalk;
private int id;

public MyThread(? inputStream, ? outputStream, boolean isStarting, int id) {
this.inputStream = inputStream;
this.outputStream = outputStream;
this.canTalk = isStarting;
this.id = id;
}

public void run() {
while(true) {
if(canTalk) {
String s = getRandomWord();
// TODO
// Write s to the output stream
}

// TODO
// Wait until receiving a String on the input stream
String s2 = the word I just received
Log.info("Thread " + id + " received the word '" + s2 + "'");
canTalk = true;
Thread.sleep(1000);
}
}

有什么想法吗?

谢谢!

最佳答案

如果您有一个必须采用输入/输出流的库,PipedInout/OutputStream 非常有用。否则是在线程之间交换数据的最不友好的方式之一。

但是,在线程之间交换数据的最简单方法是使用 ExecutorService。您可以向服务提交 Callable 任务并从 Future

获取结果

另一种方法是使用多个 BlockingQueue 但这并不能节省太多并且缺乏 ExecutorService 为您提供的功能。

您的示例存在的问题是,作为单个线程实现要简单得多。我建议您查看最适合由多线程执行的功能。

关于Java "conversation"2 个线程之间 : Piped Input/Output streams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5328403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com