Передача сообщений в несколько потоков - PullRequest
0 голосов
/ 27 ноября 2011

Я работаю над Распределенной системой , в настоящее время это скорее клиент-серверное приложение, так как мне не хватает ключевой части, которая делает его распределенной системой.Я не знаю, как реализовать мой клиентский поток classs c_thread , чтобы передать «сообщение» всем рабочим потокам w_thread , которые работают.

import java.net.*;
import java.io.*;

public class w_thread extends Thread {

    private Socket socket = null;
    private tracker track = null;
    private int tID;

    //Constructor method
    public w_thread(tracker t, Socket s) {
    super("w_thread");  
    this.track = t;     
    this.socket = s;            
    tID = track.add();
    }

    public void run() {
    try {

        String inputLine, outputLine;
        PrintWriter worker_out;
        BufferedReader worker_in;

        //set up IO to worker
        worker_out = new PrintWriter(socket.getOutputStream(), true);
        worker_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        //Get inputLine from c_thread?

        //...

        /*
        worker_out.close();
        worker_in.close();
        socket.close();
        */

    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}

import java.net.*;
import java.io.*;

public class c_thread extends Thread {

    private Socket socket = null;
    private tracker track = null;

    //Constructor method
    public c_thread(tracker t, Socket s) {
    super("c_thread");  
    this.track = t;     
    this.socket = s;        
    }

    public void run() {
    try {

        String inputLine, outputLine;
        PrintWriter client_out;
        BufferedReader client_in;

        //set up IO to client
        client_out = new PrintWriter(socket.getOutputStream(), true);
        client_in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        inputLine = client_in.readLine();

        if (track.numOfConnections() == 0) {
        outputLine = "No resources available!";     
        }

        else {      
        //send inputline to all w_threads       
        outputLine = "Resources was available!";        
        }
        client_out.println(outputLine);

        /*
        client_out.close();
        client_in.close();
        //close connection
        socket.close();
        */      

    } catch (IOException e) {
        e.printStackTrace();
    }
    }
}

Мой предыдущий вопрос описывает, что я пытаюсь реализовать: Распределенная система

1 Ответ

0 голосов
/ 29 ноября 2011

Я решил эту проблему, сохранив массив w_threads в общем объекте tracker .

private ArrayList<w_thread> threadlist = new ArrayList<w_thread>();

Это означает, что из класса c_thread у меня теперь есть доступ ко всем w_threads.

for(int i=0;i<track.numOfConnections();i++) {
     worker = track.get_thread(i);
     worker.sendWork(inputLine);
}
...