Vous êtes sur la page 1sur 5

THREADS

O conceito de threads vem da execuo de vrias linhas de comando simultaneamente. Tambm pode-se encontrar o termo multithreading, que significa dizer que o sistema operacional ou a linguagem de programao utiliza mltiplas threads. Para melhor entender uma thread deve-se analisar o conceito de um processo. Um processo vem a ser uma seqncia lgica programvel de linhas de execuo que o processador executa. A thread ou multithreads so linhas de execuo que operam simultaneamente dentro de um processo. Em Java, criar e gerenciar threads so tarefas fceis. Porm, mltiplas linhas de execuo podem resultar em um tremendo desastre. Para evitar isso, Java oferece um mecanismo nativo de sincronia baseada em monitores (KANTEK, 2004, p. 12). A linguagem de programao Java possui uma classe especfica para o funcionamento das threads, a java.lang.Thread. Uma thread pode ser criada como filha dessa classe ou ainda pode ser implementada na interface Runnable. Vale ressaltar que uma thread no um programa, e sim faz parte de um, ou seja, ela executada dentro de um programa. O corpo dessa thread o cdigo escrito no mtodo run(). neste mtodo que so executadas as tarefas da thread.

Estados das Threads Uma thread pode assumir os seguintes estados: criao, pronta para execuo, executando, fora de execuo e morta. No estado de criao, o programa ou processo a cria e coloca em estado de pronta para execuo. O estado de execuo o estado no qual a CPU est utilizando a thread. possvel ainda que aps sua execuo ele volte para o estado de pronta para executar. Para que uma thread entre no estado de fora de execuo, ela deve ser impedida de executar com um dos mtodos sleep(), suspended() ou wait() por exemplo. Ela morre quando seu mtodo run() termina ou quando referenciada pelo mtodo stop().

As threads ainda podem assumir o estado de dormindo. Esse recurso mais utilizado quando se tem a necessidade de economizar recursos (diminuir processamento). Isso faz com que ela cesse a sua execuo por um perodo de tempo (nem sempre esse tempo totalmente respeitado) (KANTEK, 2004, p. 13). Para colocar uma thread no estado de dormindo chama-se o mtodo sleep(x), onde x o tempo em milisegundos. Alm de seus estados as threads tambm possuem prioridades de execuo. Esta prioridade pode ser definida pelo mtodo setPriority(i), onde i um nmero inteiro de 1 a 10 (sendo 10 a prioridade mxima). [] A classe Thread possui trs atributos estticos constantes: MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY. A thread de maior prioridade tende a executar com mais freqncia (KANTEK, 2004, p.13).

Sincronismo entre threads Em vrias aplicaes das threads necessrio a comunicao entre elas. Para isso, a linguagem de programao Java prov locks, mais conhecidos como monitores, para impedir que uma thread acesse uma informao de outra comprometendo a integridade dos dados. Imagine um lock como uma permisso para usar o recurso. Apenas aquele que possuir a permisso poder utilizar o recurso. Os outros devero esperar. A isso damos o nome de excluso mtua (CORDEIRO, 2004, p. 7). Utiliza-se a palavra reservada synchronized, em Java, para a aplicao da sincronizao de treads. Existem mtodos como: wait(), notify() e notifyAll(), que s podem ser utilizados delimitando-os por esta palavra reservada. O mtodo wait faz com que a thread corrente entre no estado esperando. Os mtodos notify e notifyAll fazem com que a thread saia do estado esperando e volte para o estado pronto para ser executado (KANTEK, 2004, p. 13-14). A sincronizao de threads feita por monitores, que servem para bloquear o acesso a thread enquanto um objeto a estiver utilizando. Por isso que esse mtodo tambm conhecido como obteno de bloqueio. Esse mtodo mais utilizado

quando necessita-se que duas ou mais threads utilizem uma mesma fonte de dados, seja ela oriunda de um sistema de gerenciamento de bando de dados (SGBD) ou da prprio memria principal. Para que esses dados no se tornem inconsistentes usase o mtodo synchronized. Segundo DEITEL, 2003, p. 778,
Os objetos monitores mantm uma lista de todas as threads que esperam para entrar no objeto monitor para executar mtodos synchronized. A thread inserida na lista e espera pelo objeto se essa thread chamar um mtodo synchronized do objeto enquanto outra thread j esta sendo executado em um mtodo synchronized desse objeto. A thread tambm inserida na lista se ela chama wait enquanto est operando dentro do objeto. Entretanto, importante distinguir entre threads em espera que bloquearam porque o monitor estava ocupado e threads que chamaram explicitamente wait dentro do monitor. As threads externas que bloquearam porque o monitor estava ocupado podem prosseguir para entrar no objeto. As threads que invocaram wait s podem prosseguir quando forem notificadas [].

Ainda existem as variveis volteis que so amplamente utilizadas juntamente com as threads. Pois suas operaes de leitura e escrita no podem ser feitas por duas threads, alm de toda e qualquer mudana feita em uma varivel voltil visvel s demais threads. A declarao dessa varivel feita utilizando a palavra reservada volatile.

Exemplo de utilizao de Thread em Java public class Principal { static class Tarefa1 extends Thread { public void run() { for(int i=0; i<10; i++) { System.out.println("Usando Herana"); } } }

static class Tarefa2 implements Runnable { public void run() { for(int i=0; i<10; i++) { System.out.println("Usando Runnable"); } } }

public static void main(String[] args) { Thread threadComHeranca = new Tarefa1(); Thread threadComRunnable = new Thread(new Tarefa2()); System.out.println("Classe de exemplo para demonstrao do uso de Threads\n"); threadComHeranca.start(); threadComRunnable.start(); } }

REFERNCIAS
CORDEIRO, Daniel de Angelis. Introduo ao uso de Threads em Java. Instituto de Matemtica e Estatstica da Universidade de So Paulo (IME-USP). So Paulo, 2004. Disponvel em: <http://www.ime.usp.br/~gold/cursos/2004/mac438/threadsEmJava.pdf>. Acesso em: 19 jun. 2007. DEITEL, H. M.; DEITEL, P. J. Java, como programar. 4 ed. Porto Alegre, Bookman, 2003. JEVEAUX, Paulo Csar M. Utilizando Threads. Portal Java. Disponvel em: <http://www.portaljava.com.br/home/modules.php? name=Content&pa=showpage&pid=9>. Acesso em: 19 jun. 2007. KANTEK, Antonio. Introduo a Thread. Revista MundoJava. Curitiba, Ano 2, n. 07, p. 12-14, 2004.

Vous aimerez peut-être aussi