Thread

7 respostas
TeiTei

Galera eu montei duas classes cada uma contem um while(true), ai montei uma terceira q chama estas duas, mas o que contece que esta parando na primeira vejamm…

Eu crio uma Thread para as minhas classes.

Thread t1 = new Thread(new classWhile1,"Thread1"); // Ele para aqui neste trecho e nao executa mais nada para baixo.
Thread t2 = new Thread(new classWhile2,"Thread2");
t1.start();
t2.start();

Alguem pode me ajudar?

7 Respostas

Guilherme_Gomes

Esse while true esta no construtor? Como está feito?
Mostra um pedaço dos códigos!

TeiTei
package socketmulticlients;
import java.io.*;
import java.net.*;

class classWhile1 extends Thread {
    
    ServerSocket server = null;
    Socket client = null;
    BufferedReader in = null;
    PrintWriter out = null;
    String line;
    
    SocketServer(){listenSocket();}
    
    public void listenSocket(){
        
        try{
            server = new ServerSocket(1099);
            client = server.accept();
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream(), true);
        } catch (IOException e) {
            System.out.println("Sem conexão com a porta 1099");
            
        }
        
        while(true){
            try{
                line = in.readLine();
                out.println("recebido pelo servidor com sucesso!");
                
            } catch (IOException e) {
                System.out.println("Falha na leitura");
                
            }
        }
    }
    
    protected void finalize(){
        try{
            in.close();
            out.close();
            server.close();
        } catch (IOException e) {
            System.out.println("Falha ao fechar.");
            System.exit(-1);
        }
    }
    
    
}
Guilherme_Gomes

Pelo que entendi, logo que vc executa

Thread t1 = new Thread(new classWhile1,"Thread1");

Ele está entrando na função listenSocket() e no while(true, por isso não sai dessa linha nunca, tenta passar o conteúdo dessa função para um método run() e veja o que acontece.

tonyam

O método start() executa o método run() da Thread. Então o while fica no método run()

TeiTei

Caras olhem

Classe1:

import java.io.*;

import java.net.*;

class classWhile1 implements Runnable {
    
    Socket socket = null;
    PrintWriter out = null;
    BufferedReader in = null;
    
     public void run() {
        try {
            socket = new Socket("infor26", 1099);
            out = new PrintWriter(socket.getOutputStream(), true);
            in =  new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
        } catch (UnknownHostException e) {
            System.out.println("Host desconhecido: localhost");
            System.exit(1);
        } catch (IOException e) {
            System.out.println("Não ha Servidor ouvindo");
            System.exit(1);
        }
        
        while (true) {
            
            try {
                String line = in.readLine();
                System.out.println(line);
             } catch (IOException e) {
                System.out.println("Falha de leitura");
                System.exit(1);
            }
        }
        
    }

Classe2:

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

class classWhile2 implements Runnable  {
    
    ServerSocket server = null;
    Socket client = null;
    BufferedReader in = null;
    PrintWriter out = null;
    String line;
    
    public void run() {
        try{
            server = new ServerSocket(1099);
            client = server.accept();
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            out = new PrintWriter(client.getOutputStream(), true);
        } catch (IOException e) {
            System.out.println("Sem conexão com a porta 1099");
            
        }
        
        while(true){
            try{
                line = in.readLine();
                out.println("recebido pelo servidor com sucesso!");
                
            } catch (IOException e) {
                System.out.println("Falha na leitura");
                
            }
        }
    }
    
    
}

Classe Principal:

public class Principal{
    


    
    public static void main(String args[]){
    
        Thread t1 = new Thread(new classWhile1(),"thread1");
        t1.start();

        Thread t2 = new Thread(new classWhile2(),"thread2");
        t2.start();
        
    
    }


       
    }

   
    
}

Continua travando…galera maus e que ta dificil de entender…alguem pode me ajudar?

TeiTei

Deu certo galera

Abdon

E qual foi a solução adotada??

Criado 21 de novembro de 2007
Ultima resposta 21 de nov. de 2007
Respostas 7
Participantes 4