java对线程间的通讯有专门的IO支持。 管道流 PipedInputStream,PipdedOutputStream,PipedReader,PipedWriter可以用于通信,具体的可以看Think in java 的 并发 部分或者是 JDK里自己去查。
我可以向您提供以下几种方法: 1.建立一个自己的管道:方法很简单,生成一个共享文件,并且利用线程1去写,利用线程2去读以实现通信,其中写操作和读操作均需要放在定时器中,例如每1秒执行一次。具体读写文件操作就不用我多说了吧(这种方法适用于java应用程序和其它应用程序间的通信,非常好用)。 2.可以利用管道流PipedInputStream和PipedOutPutStream实现,具体请参阅Java API
管道流 PipedInputStream,PipdedOutputStream,PipedReader,PipedWriter可以用于通信,具体的可以看Think in java 的 并发 部分或者是 JDK里自己去查。
1.建立一个自己的管道:方法很简单,生成一个共享文件,并且利用线程1去写,利用线程2去读以实现通信,其中写操作和读操作均需要放在定时器中,例如每1秒执行一次。具体读写文件操作就不用我多说了吧(这种方法适用于java应用程序和其它应用程序间的通信,非常好用)。
2.可以利用管道流PipedInputStream和PipedOutPutStream实现,具体请参阅Java API
public class E8_15{
//管道流的应用
public static void main(String args[]){
PipedOutputStream pos=new PipedOutputStream();
PipedInputStream pis=new PipedInputStream() ;
try{
pis.connect(pos);//连接管道
}catch(IOException e){
System.out.println(e);
}
Thread1 t1=new Thread1(pos);
Thread2 t2=new Thread2(pis);
t1.start();
t2.start();
}
}
//线程1,用来发送消息。把数据输出到管道
class Thread1 extends Thread{
private DataOutputStream dos ;
public Thread1(PipedOutputStream pos){
dos=new DataOutputStream(pos);
}
public void run(){
System.out.println("发送消息,请接收:");
String s=new String("线程2,你好吗?");
try{
dos.writeUTF(s);
dos.close();
}catch(IOException e){
System.out.println(e);
}
}
}
//线程2,用来接收消息,从管道接收数据
class Thread2 extends Thread{
private DataInputStream dis ;
public Thread2(PipedInputStream pis){
dis=new DataInputStream(pis);
}
public void run(){
String s=null;
try{
s=dis.readUTF();
System.out.println("从线程1接收到的消息是:"+s);
dis.close();
}catch(IOException e){
System.out.println(e);
}
}
}
上例的输出是:
发送消息,请接收:
从线程1接收到的消息是:线程2,你好吗?
【例8-16】
import java.io.*;
public class E8_16{
//管道流的应用
public static void main(String args[]){
PipedReader pr=new PipedReader();
PipedWriter pw=new PipedWriter() ;
try{
pr.connect(pw);//连接管道
}catch(IOException e){
System.out.println(e);
}
Thread1 t1=new Thread1(pw);
Thread2 t2=new Thread2(pr);
t1.start();
t2.start();
}
}
//线程1,用来发送消息。把数据输出到管道
class Thread1 extends Thread{
private PipedWriter pw ;
public Thread1(PipedWriter pw){
this.pw=pw;
}
public void run(){
System.out.println("发送消息,请接收:");
String s=new String("线程2,你好吗?");
try{
pw.write(s);//把字符串写到管道里
pw.close();
}catch(IOException e){
System.out.println(e);
}
}
}
//线程2,用来接收消息,从管道接收数据
class Thread2 extends Thread{
private PipedReader pr ;
public Thread2(PipedReader pr){
this.pr=pr;
}
public void run(){
int i=0;
char c=0;
try{
//读取管道中的字符
while((i=pr.read())!=-1)
System.out.print((char)i);
System.out.println();
pr.close();
}catch(IOException e){
System.out.println(e);
}
}
}