0

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

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..");
    }
}  
4

1 回答 1

1

不要使用notify,最好使用notifyAll,因为可能会发生活性故障,命名为:missing signals。纠正您的代码会很困难,以下是具有不同类的生产者/消费者实现的代码:

Buffer 类用于存储生产者和消费者之间共享的数据。他们有自己的类和一个示例,您可以在BoundedBuffer.java. 它们不涉及繁重的计算任务,只是在两者之间传递消息。这是一个干净的实现,请尝试完成它。

于 2012-07-02T23:24:32.147 回答