E ai Henrique, pelo que eu imaginei tu ta com um design parecido com o esquema (em
ASCIIART:) anexo.
Tenta elaborar a seguinte logica(ja fiz um programa no mesmo estilo):
Na classe Main
- cria um metodo listen onde teu ServerSocket vai ficar escutando novas requisicoes
- para cada accept (dentro de um loop infinito em listen) cria uma nova instancia de
Connection (que sera nada
mais que uma classe com a implementacao de uma Thread com um socket para manter a
comunicacao com o
client). Este processo pode ser interpretado como um dispatch de requisicoes. No
momento que tu criares uma
nova Connection (Instanciando um novo Socket e uma nova Thread) tu adiciona esta
connection na tua
associacao a classe HashMap.
Resumindo: delega o controle do Ciclo de Vida e a manipulacao da HashMap para a tua
classe principal e cria um
metodo publico para que uma Connection possa se remover ao termino do servico. Ha um
forte Acoplamento
entre os objetos, uma vez que connection precisa da reperencia a Main para que seja
removida da HashTable.
Ainda estou pensando num meio pra diminuir o acoplamento...
Ja tentou a classe ThreadGroup?
On Mon, 17 Feb 2003 12:18:13 -0300, "Henrique" <[EMAIL PROTECTED]> escreveu :
> De: "Henrique" <[EMAIL PROTECTED]>
> Data: Mon, 17 Feb 2003 12:18:13 -0300
> Para: <[EMAIL PROTECTED]>
> Assunto: [enterprise-list] Threads
>
> Pessoal, estou implementando uma solução em Java que
> utiliza Threads, mas, me deparei com um problema ainda sem solução.
>
> Descrição, Simulação Problema:
>
> - existe uma classe principal, escutando numa porta qualquer
> (socket) esperando requisições (Daemon). Para toda requisição a esta classe
> principal, é levanta uma Thread que realiza uma determinada operação e é
> destruída;
>
> - na classe principal, existe um objeto Hashtable público, sua
> função é armazenar valores setados nas Threads que são levantadas. Dessa
> forma, nas Threads de acordo com a lógica do algorítmo, posso executar ADD
> ou REMOVE no Hashtable público.
>
> - o problema está exatamente em deixar esse Hashtable público, todas
> as vezes que levanto uma nova Thread, o Hashtable é inicializado, não
> consigo torná-lo público para as Threads.
>
>
> Já tentei utilizar o Hashtable como público para todas as Threads, já
> tentei passá-lo por parâmetro(valor) para as Threads, já utilizei uma classe
> SingleTone e nada. Não testei passando por parâmetro(referência).
>
> Deu pra entender meu problema? Preciso tornar o Hashtable
> inicializado na classe principal público para todas as Threads, observe que
> essas Threads manipulam o Hash e são destruídas devendo o Hash permanecer
> disponível com seu valor para as novas Threads que serão levantadas.
>
>
> Henrique
>
>
>
> ---------------------------------------------------------------------
> Para cancelar a subscri��o, envie mensagem para:
>[EMAIL PROTECTED]
> Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]
>
>
>
>
<Padilha id="Nilseu">
Nilseu Perside Ortiz Padilha Junior
Desenvolvedor Java - J2EE
Immediate Consultoria e Sistemas
http://www.immediate.com.br
Ciencia da Computacao - ULBRA
<Quote>
Rejeitamos reis, presidentes e votos. Acreditamos em puro consenso e codigo eficiente.
- Dave Clark
</Quote>
<Quote>
One exam does not a (J2EE) architect make. - Master Yoda
</Quote>
</Padilha>
+-----------+ +---------------------+
| Main | 1 * |Connection |
+-----------+-------------------------------+---------------------+ - myThread
| listen() | | Connection(Int Port)|<--------+
| diapatch()|<---------------+ | beginService() | |
| remove() | - myHash | +---------------------+ +-------+
+-----------+ +----------+ | Thread|
| HashTable| +-------+
+----------+
---------------------------------------------------------------------
Para cancelar a subscri��o, envie mensagem para:
[EMAIL PROTECTED]
Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]