2014-10-09 4 views
0

У меня есть 3 класса 1. основная 2. Мастер 3. Клиенты (три экземпляра). Мастер и клиент имеют прирост функции, где они продолжают увеличивать значение, а периодически клиенты (скажем, каждые 2 сек.) Отправляют это значение приращения на мастер и в произвольное время каждый клиент должен отправлять сообщение другому клиенту, который он выбирает случайным образом (например, клиент1 отправляет клиенту 2). и когда мазер получает сообщение, он будет выполнять некоторые вычисления и транслировать значение на все cilent.Как общаться между потоками

Главная -------->

public class Sample_one{ 

public static final int PORT = 4444; 
public static void main(String[] args) throws IOException{ 


ServerSocket server = new ServerSocket(PORT); 
Socket socket =server.accept(); 

Thread m1= new Master(socket); 
m1.start(); 


Client c1 = new Client(); 
Client c2 = new Client(); 
Client c3 = new Client(); 
c1.start(); 
c2.start(); 
c3.start(); 

} 
} 

Мастер ----->

общественного класса Master расширяет тему {

private int inc= 0; 
long start = System.currentTimeMillis(); 
long end = start + 10*1000; 
Socket socket; 

Master(Socket socket){ 
    this.socket = socket; 
} 

@Override 

public void run() { 

    while(System.currentTimeMillis() < end){ 
     increment(); 

    //Method to read input from the client 

     } 

} 

private void increment(){ 
    inc++; 
    System.out.println("counter"+ inc); 
} 

} 

Client ->

public class Client extends Thread { 

    private int inc= 0; 
    long start = System.currentTimeMillis(); 
    long end = start + 10*1000; 

    public void run() { 

    while(System.currentTimeMillis() < end){ 
     increment(); 

    //Method to send the value to the Master or other clients 


     } 

     } 

    private void increment(){ 
    inc++; 
    System.out.println("counter"+ inc); 
    } 

    } 

Я иду в текущий путь ??? Как подключить мастер и клиент и клиент к другим клиентам? Независимо от того, является ли Socket единственным способом? Я новые темы.

+1

Связь между потоками выполняется/обсуждается, когда потоки находятся в одном процессе. Розетки предназначены для межмашинной связи (обычно). В какой классификации вы находитесь? Вы смешиваете их вместе. – SingleStepper

+0

Мне нужно смоделировать это только на одной машине –

+1

Звучит слишком сложно, что для меня означает плохой дизайн. Я вижу, как клиенты общаются с мастером, но почему они должны разговаривать друг с другом? В идеале вы хотите, чтобы потоки были как можно более независимыми, и, возможно, только разделяли некоторые данные, а не отправляли сообщения туда и обратно. – ventsyv

ответ

0

Возможно, лучше всего использовать трубы. Например, посмотрите на классы PipedInputStream и PipedOutputStream. После того, как вы откроете трубы, чтобы получать данные, вы должны сделать что-то вроде этого:

//establish the pipe connection 

while (pipe) //assuming someone will eventually close the connection 
{ 
    while (pipe.available() > 0) 
     buffer.addByte(pipe.read()) 

    //Do some other processing 
} 
Смежные вопросы