如何设置一个读和写的共用缓冲区?

wthua 2004-08-18 07:07:29
我想设置一个读取和写入的共用的缓冲区,这样我就可以从一个线程不停的往这个缓冲区写入数据,同时另外一个线程随时查看这个缓冲区是否有数据,如果有数据,就把这个数据取走,所以我想设置一个读写共用的缓冲区,但是我感觉找不到这样的对象,本来我打算用一个String对象作为共用缓冲区的,但是不能保证数据放入到这个缓冲区后立即就能被取走,所以必须是设置一个缓冲区而不是一个简单的String对象作为共享资源,请问各位Java前辈怎样处理这个问题或者有其它的替代的解决方法?
...全文
173 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
registered 2004-08-19
  • 打赏
  • 举报
回复
//: c13:PipedIO.java
// Using pipes for inter-thread I/O
import java.io.*;
import java.util.*;

class Sender extends Thread {
private Random rand = new Random();
private PipedWriter out = new PipedWriter();
public PipedWriter getPipedWriter() { return out; }
public void run() {
while(true) {
for(char c = 'A'; c <= 'z'; c++) {
try {
out.write(c);
sleep(rand.nextInt(500));
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
}
}

class Receiver extends Thread {
private PipedReader in;
public Receiver(Sender sender) throws IOException {
in = new PipedReader(sender.getPipedWriter());
}
public void run() {
try {
while(true) {
// Blocks until characters are there:
System.out.println("Read: " + (char)in.read());
}
} catch(IOException e) {
throw new RuntimeException(e);
}
}
}

public class PipedIO {
public static void main(String[] args) throws Exception {
Sender sender = new Sender();
Receiver receiver = new Receiver(sender);
sender.start();
receiver.start();
new Timeout(4000, "Terminated");
}
} ///:~

这是 Thinking In Java 里的例子
很有代表性
wthua 2004-08-18
  • 打赏
  • 举报
回复
各位,能说的具体一点吗?
iwantiten 2004-08-18
  • 打赏
  • 举报
回复
用管道PipedInputStream和PipedOutputStream
输出线程往PipedOutputStream中写
输入线程从PipedInputStream中读
当然事先要把两个连接起来, 看看文档, 找找参考书. 应该可以解决这个问题
tan_jianhui 2004-08-18
  • 打赏
  • 举报
回复
用队列行不行?
fjdtsm 2004-08-18
  • 打赏
  • 举报
回复
线程同步
还有就是环形栈

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧