管道—过滤器管道-过滤器的详细解说及其内容分析
NumFilter1
import java.io. *;
public class NumFilter1 extends Thread {
PipedWriter piped_writer;
public NumFilter1(PipedWriter pw) {
piped_writer = pw;
}
public void run() {
try {
for (int j = 1; j<100; j++){
synchronized(this){
piped_writer.write(j ) ;
System.out.println(" " );
System.out.println("Filter 1 writing = " + j+"\n" );
Thread.sleep(1000);
}
}
piped_writer.write(-1) ;
}
catch(Exception e) {
}
}
}
/***************************************************************************/
NumFilter2
import java.io. *;
public class NumFilter2 extends Thread {
PipedReader piped_reader;
PipedWriter piped_writer;
public NumFilter2(PipedReader pr, PipedWriter pw) {
piped_reader = pr;
piped_writer = pw;
}
public void run() {
try {
while (true) {
synchronized(this){
int c = piped_reader.read();
if ( c != -1){
System.out.println(" " );
System.out.println("Filter 2 reading = " + c );
int m = c+100;
piped_writer.write(m);
System.out.println("Filter 2 writing = " + m +"\n");
Thread.sleep(1000);
}
else
return;
}//sync
}
}
catch(Exception e) {}
}
}
`
/*********************************************************************************8/
import java.io. *;
public class NumFilter3 extends Thread {
PipedReader piped_reader;
PipedWriter piped_writer;
public NumFilter3(PipedReader pr, PipedWriter pw) {
piped_reader = pr;
piped_writer = pw;
}
public void run() {
try {
while (true) {
synchronized(this){
int c = piped_reader.read();
if ( c != -1){
System.out.println(" " );
System.out.println("Filter 3 reading = " + c );
int m = c+200;
piped_writer.write(m);
System.out.println("Filter 3 writing = " + m+"\n" );
Thread.sleep(1000);
}
else
return;
}//sync
}
}
catch(Exception e) {}
}
}
/***************************************************************************/
import java.io. *;
public class NumFilter4 extends Thread {
PipedReader piped_reader;
public NumFilter4(PipedReader pr) {
piped_reader = pr;
}
public void run() {
try {
while (true) {
synchronized(this){
int c = piped_reader.read();
if ( c != -1){
System.out.println(" " );
System.out.println("Filter 4 reading = " + c );
int m = c+300;
Thread.sleep(1000);
}
else
return;
}//sync
}
}
catch(Exception e) {}
}
}
`/********************************************************************/
import java.io. *;
public class TestFilter {
public static void main(String[] args) {
PipedWriter pipe1_leftEnd = new PipedWriter();
PipedReader pipe1_rightEnd = null;
PipedWriter pipe2_leftEnd = new PipedWriter();
PipedReader pipe2_rightEnd = null;
PipedWriter pipe3_leftEnd = new PipedWriter();
PipedReader pipe3_rightEnd = null;
try{
pipe1_rightEnd = new PipedReader(pipe1_leftEnd);
pipe2_rightEnd = new PipedReader(pipe2_leftEnd);
pipe3_rightEnd = new PipedReader(pipe3_leftEnd);
}
catch(IOException io){ }
//create filter objects
NumFilter1 f1 = new NumFilter1(pipe1_leftEnd );
NumFilter2 f2 = new NumFilter2(pipe1_rightEnd, pipe2_leftEnd);
NumFilter3 f3 = new NumFilter3(pipe2_rightEnd, pipe3_leftEnd);
NumFilter4 f4 = new NumFilter4(pipe3_rightEnd);
f1.start();
f2.start();
f3.start();
f4.start();
}
}
“`
/*********************************************************************************88/