Mania de acharem que while não é boa prática. Só por que é uma estrutura básica.
Daí pegam e trocam por um timer que no fim das contas faz a mesma coisa e
gastam mais recursos.
Por que acham que ainda se lê arquivos com readLine???
Por que há interação do programa com a parte física e nessas horas a parte
física não dispara eventos.
O while fica repetindo a checagem da porta, é pra isso que ele existe.
Você está interagindo com a parte física, não existe evento “A porta recebeu”, então
que se pode fazer e ficar lendo ela para ver se recebeu algo.
Estava analisando alguns exemplos na internet sobre servers (socket) multithreaded. Percebi que todos utilizam de um while (true) para que o server fique aguardando alguma conexão (conforme esse exemplo: http://javafree.uol.com.br/topic-8536-ServerSocket-e-Socket-duvida-Servico.html).
Existe uma forma de fazer esse server ficar aguardando conexões sem usar esse while (true) (no exemplo como while (! done))??
Alguém tem alguma idéia ou já fez isso?
Obrigada.[/quote]
Acho q não …não tem um Listener de conexão!! Por isso o while.
Não vejo problema nenhum…é só colocar numa thread separada…
[quote=dalilaserpa]É exatamente esse while que eu queria eliminar, pois não acho uma boa prática. Só queria saber se existe outra forma.
Obrigada![/quote]
Quais são os contras?
Se while não fosse um boa pratica não estaria no Java como aconteceu com ponteiros , herança multipla etc…
Outra coisa, while é uma instrução de repetição básica…não entra como “boa pratica”.
Qual linguagem que retirou a semantica do while por ser uma pratica ruim? kkkkk
[quote]Acho que o Java é uma grande linguagem e usar esse while (true) é muito primitivo. Mas, caso não tenha outro jeito, fazer o que…
[/quote]
Não acho isso, em Java temos um comando BREAK q interrompe a instrução do while…é muito normal usar while(true) que sintaticamente e semanticamente dizendo expressa um bloco repetição infinito. Diante disso, vc pode usar o break dentro de um logica complexa para estabelecer um critério de interrupção do loop.
Talvez vc poderia ter falado levantado a situação de forma diferente…com algo assim: “Por que Java não tem um comando q expresse nativamente um bloco de codigo loop infinito ?”
“Por que na linguagem TAL tem um comando assim, assado” Vc sabe de alguma??? Quero te dizer que existe o JCP para vc votar nas novas coisas do java…fique a vontade para fazer um pedido de JSR.
[quote]Se while não fosse um boa pratica não estaria no Java como aconteceu com ponteiros , herança multipla etc…
Outra coisa, while é uma instrução de repetição básica…não entra como “boa pratica”.
Qual linguagem que retirou a semantica do while por ser uma pratica ruim? kkkkk [/quote]
Ela não falou do while ser uma má prática. Ela estava falando explicitamente de não colocar uma condição de parada no while.
Aliás, eu também não considero o
while (true)
a melhor das práticas.
Você é obrigado a procurar a condição de parada do while no meio do código. Se o while for muito curtinho, até vá lá.
Mas prefiro deixar as coisas mais explícitas.
Lembrando que como um server socket é tipicamente um sistema multi-thread, essa variável boolean ou terá que ser declarada como volatile, ou terá que ser acessada através da chamada de um método sincronizado.
Ainda não vi argumentos reais e claros q afirmem isso…q por enquanto, para mim é apenas uma opinião particular…
Vc’s tem a liberdade de tentar me convencer…kkkkkkk
[quote=dalilaserpa].
Ah e essa de colocar uma variavel booleana lá não muda muita coisa, afinal ela será “setada” como true, praticamente dá na mesma.
[/quote]
Só complementando a discussão, há muita diferença em usar uma variável, desta forma você pode definir quando o servidor deve parar de escutar novas conexões.