首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中线程间的数据通信

java中线程间的数据通信
EN

Stack Overflow用户
提问于 2012-04-09 16:55:19
回答 1查看 1.5K关注 0票数 0

我用java编写了一个小程序,用两个线程发送和接收一个数据文件。我希望这两个线程在同一个类中。一个线程发送该文件,另一个线程接收该文件。我已经为它写了代码,但是没有什么错误。你能帮我找出代码中的错误吗。我是一个学生和一个初学者在java,所以请原谅我,如果有任何愚蠢的错误。

代码语言:javascript
运行
复制
import java.lang.Thread.*;
import java.io.*;
public class sendques implements Runnable
{
    int i=0,c;
    static Thread[] t= new Thread[2];
    FileInputStream fis=new FileInputStream("ip.jpg");
    FileOutputStream fos=new FileOutputStream("output.jpg");
    sendques() {
        for(i=0;i<2;i++){
            t[i]=new Thread(this);
            t[i].start();
            System.out.println("Threads "+i);
        }
    }
    void run() {
        while(true) {
            wait();
            send();
        }
    }
    void send() {
        while((c=fis.read())!=-1) {
            t[2].receive(c);
            wait();
        }
    }
    void receive(int d) {
        while(c!=-1) {
            fos.write(d);
            t[1].notify();
        }
    }
    public static void main(String arg[]) {
        sendques sq=new sendques();
        t[1].send();
        System.out.println("Quiting..");
    }
}  
EN

回答 1

Stack Overflow用户

发布于 2012-07-02 23:24:32

不要使用notify,最好使用notifyAll,因为可能会发生活性故障,名为:错过信号。这将使您很难更正您的代码,下面是不同类的生产者/使用者实现的代码:

缓冲区类用于存储生产者和使用者之间共享的数据。他们有自己的类和一个在BoundedBuffer.java中可以找到的例子。它们不涉及繁重的计算任务,只是在两者之间传递消息。这是一个干净的实现,试着通过它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10076697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档