正如标题所说,模拟代码来说明我的问题
驱动程序类
import java.io.*;
public class driver
{
public static void main(String[] args)
{
PipedWriter writer1 = new PipedWriter();
PipedWriter writer2 = new PipedWriter();
PipedReader reader1 = new PipedReader();
PipedReader reader2 = new PipedReader();
Thread thread1 = new MyThread(writer1, reader1);
Thread thread2 = new MyThread(writer2, reader2);
try
{
writer2.connect(reader1);
} catch(Exception e)
{
e.printStackTrace();
}
}
}
MyThread Class
import java.io.*;
public class MyThread extends Thread
{
PipedReader input = new PipedReader();
PipedWriter output = new PipedWriter();
public MyThread(PipedWriter input, PipedReader output)
{
try
{
this.input.connect(input);
this.output.connect(output);
} catch(Exception e)
{
e.printStackTrace();
}
}
public void run()
{
try
{
input.close();
output.close();
}catch(Exception e)
{
e.printStackTrace();
}
}
}
我不确定.connect方法是否应该使用。我想要做的是让第一个线程的输出流直接写入第二个线程的输入流。
上面的代码编译得很好但是说它已经连接了。
java.io.IOException: Already connected
at java.io.PipedWriter.connect(Unknown Source)
at driver.main(driver.java:17)
答案 0 :(得分:2)
如果作者连接到阅读器,则阅读器也连接到作者。您不需要连接它们两次。如果一个线程写入而另一个线程读取,则只需要一个写入器和一个读取器。
在主线程中创建两者,连接它们,然后使用reader创建一个线程,使用writer创建一个线程,并启动两个线程。
答案 1 :(得分:0)
您正在为Thread类中的编写器和读取器进行一些不必要的初始化。只需挂接传递给构造函数的实例并将它们连接起来。伪代码:
import java.io.*;
public class MyThread extends Thread
{
PipedReader input = null;
PipedWriter output = null;
public MyThread(PipedWriter input, PipedReader output)
{
this.input = input;
this.output = output;
this.output.connect(input);
}
}
阅读PipedWriter和读者here。