Multithreading

Um dos possíveis problemas na execução de aplicações segundo o modelo cliente-servidor está associado com o tempo de atendimento a uma solicitação pelo servidor. Se o servidor for um processo monolítico, ele estará indisponível para receber novas requisições enquanto a solicitação não for completamente atendida. A solução para este problema depende da possibilidade de se estabelecer um processamento independente para o atendimento de cada solicitação ao servidor, liberando tão cedo quanto possível o servidor para receber novas solicitações.

O conceito de processamento independente é parte integrante da linguagem Java, através de multithreading. Todo processamento em Java está associado a alguma thread, sendo que novas threads de execução podem ser criadas a partir de qualquer thread. A criação de novas threads é em geral associada a classes que implementam a interface java.lang.Runnable, que define um método run(), os quais são utlizados para criar objetos da classe java.lang.Thread, com métodos start() e stop(), entre outros.

Com as facilidades suportadas pela linguagem, torna-se atrativo implementar servidores multithreaded, cujo corpo principal de processamento resume-se a um laço eterno para aceitar solicitações na porta especificada e criar um objeto thread para atender à solicitação recebida. A funcionalidade do serviço que será executado pela thread é definida no corpo do método run() que implementa a interface Runnable associada à thread criada. Cada thread criada existe exclusivamente durante o tempo necessário para atender à solicitação.

Multithreading no tutorial de Java (Sun).

Exemplo de servidor TCP usando múltiplas threads.


© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP

Last modified: Tue Sep 11 17:19:06 EST 2001