Dúvida com threads - Java - Portugal-a-Programar
Por HecKel, 3 de Dezembro de 2006 em Java
Estou a fazer um trabalho para a faculdade e necessitados de usar algumas threads...
Basicamente o trabalho é algo como um IRC limitado...
Algures no trabalho necessitámos de criar uma thread para ir recebendo dados do servidor, só que precisamos de aceder a estes dados no programa principal, sugestões?
Aqui ficam as funções deste problema:
public class VChatClient implements ChatProcessor {
public List<String> getChatNames() {
// TODO Completar codigo
ChatRooms cr = new ChatRooms();
cr.doit();
System.out.println( "Obter lista de nomes");
return cr.getChannels();
class ChatRooms implements Runnable {
// sala - hora
private Map<String, Long> chanmap;
MulticastSocket receiver = new MulticastSocket(9500);
receiver.joinGroup(InetAddress.getByName("255.0.0.0"));
receiver.receive(dp);
String channels = new String(dp.getData(), 0, dp.getLength());
String[] chanarray = channels.split(";");
chanmap = new HashMap<String, Long>();
for(int i = 0; i < channels.length(); i++)
chanmap.put(chanarray[i], System.nanoTime());
Iterator<Entry<String, Long>> it = chanmap.entrySet().iterator();
Entry<String, Long> ent = it.next();
if((System.nanoTime() - ent.getValue()) > timeout)
chanmap.remove(ent.getKey());
list.add(ent.getKey());
A classe ChatRooms é nested class.
PS: É provavel que este bloco de código ainda tenha erros, nem foi testado, ignorem esses erros. Para já apenas quero saber como resolver isto das threads, sff.
... só que precisamos de aceder a estes dados no programa principal, sugestões?
As tuas threads podem ter referencia para o programa principal, ou algum dos seus componentes, e invocarem métodos e/ou actualizarem estruturas de dados. Outra solução é a das tuas threads terem métodos que permitam aceder aos dados que precisas e no programa principal teres uma estrutura que guarde todas as threads, desta forma acedes quando quiseres aos dados que precisas.
Já agora porque é que tens uma Nested Class? Há alguma razão pela qual a classe ChatRooms não possa existir sem a tua classe VChatClient?
Ainda não testei, mas da forma como tenho o selector deveria dar aceder ao conteúdo da thread..., mas tenho receio de não ser tão trivial como estou a fazer...
Sobre as Nested Class, basicamente é uma questão de organização. As nested classes que estou a usar só têm mesmo sentido naquelas classes e uma forma de não me trocar todo com muitos ficheiros ou muitas classes dentro de um só ficheiro é não misturar alhos com bugalhos Tendo em conta que estando separada, a classe não tem qualquer sentido julgo que o mais acertado será mesmo estar como nested class.
Tendo em conta que estando separada, a classe não tem qualquer sentido julgo que o mais acertado será mesmo estar como nested class
Então não consideras fazer sentido eu conseguir usar a classe ChatRooms com um player diferente? Isso parece má reutilização de código .
Não tomei muita atenção ao teu código, gosto mais de ver código dentro do meu netbeans , amanha de manha vou dar uma olhadela melhor e responder-te com mais calma e tentar ser mais útil, a resposta anterior não foi muito útil... enfim. A questão das nested classes nã é importante mas pode facilitar/atrapalhar o resto do trabalho, mas como não tenho mais informação não me vou alongar sobre isso. Só uma nota, nested classes quebram um pouco a performance... não que neste caso notes muito, só para futura referência.
Segundo o meu professor compliquei aquilo que é fácil, pensei em threads como se fossem processos...
O meu código já estava teoricamente certo, agora resta-me testar
pensei em threads como se fossem processos...
Podes pensar como "processos leves", mas mesmo esta analogia não está correcta, transmite uma ideia errada.
São parecidos em muitas coisas mas diferentes em tantas outras. Bem ia ver com atenção o teu código, acordei agora e estava para ai virado, assim, vou jogar WOW
Sim, threads usam o mesmo pid, não são independentes e não se devem matar. Devem morrer naturalmente. Processos têm um pid diferente, não dependem do processo pai.
Eu compreendi mal a filosofia das threads, mas julgo que agora já estou lançado Se conseguir fazer o trabalho em condições depois apresento aqui a totalidade do código (se a nota for boa )