TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Introdução a Thread na linguagem JAVA

Por:   •  28/3/2017  •  Trabalho acadêmico  •  11.426 Palavras (46 Páginas)  •  325 Visualizações

Página 1 de 46

Múltiplas  Linhas  de Execução

Propriedades de Linha de Execução

Você  provavelmente está familiarizado com  a multitarefa: a capacidade de  ter mais de  um  programa funcionando no  que  parece ser simultâneo. Por  exemplo, você  pode imprimir enquanto edita ou  envia  um  fax. É  claro  que,  a  menos que  você  tenha uma máquina com vários processadores, o que  ocorre  realmente é que  o sistema operacional está repartindo  recursos para  cada programa, dando a  impressão  de  atividade  paralela. Essa distribuição de  recursos é possível pois, enquanto o usuário pode  pensar que  está mantendo o computador ocupado para, por  exemplo, introduzir dados, a maior parte  do tempo  da CPU estará ociosa.

A  multitarefa  pode   ser  realizada  de   duas  maneiras,  se o  sistema  operacional interromper  o  programa sem consultar  primeiro  ou  se os programas são interrompidos apenas  quando estão  querendo produzir   controle.  O  primeiro  caso  é   chamado  de multitarefa  preemptiva;  o último  é  chamado de  multitarefa  cooperativa.  O Windows  3.1,

95, 98 e NT são sistemas multitarefa cooperativos e os Unix são preemptivos.

Os  programas  de   múltiplas  linhas  de   execução  ampliam  a  idéia  da  multitarefa levando­a  um  nível  mais  abaixo:  os  programas individuais  parecerão  realizar  várias tarefas ao  mesmo tempo.  Normalmente, cada tarefa é  chamada de  linha de  execução (Thread) que  é a abreviação de  linha de  execução de  controle. Diz­se que  os programas que  podem executar mais de uma  linha de execução simultaneamente são multilinhas, ou têm   múltiplas  linhas  de   execução.  Considere cada  linha  de   execução  como   sendo executada em  um  contexto separado:  os contextos fazem  paracer que  cada linha de execução possui sua  própria CPU com registradores, memória e seu próprio código.

Então, qual é a diferença entre  múltiplos processos e múltiplas linhas de execução? A diferença básica é que,  enquanto cada processo tem um conjunto completo de variáveis próprias, as linhas de  execução compartilham os mesmos dados. Isso parece um  tanto arriscado e, na verdade, pode  ser, conforme você  verá  posteriormente. Mas é necessário muito menos sobrecarga para  criar e destruir linhas de  execução individuais do que  para ativar  novos processos  e  esse é  o  motivo  pelo  qual  todos os sistemas operacionais modernos oferecem suporte a múltiplas linhas de  execução. Além disso, a comunicação entre  processos é  muito mais lenta e  restritiva do  que  a  comunicação entre  linhas de execução.

As múltiplas  linhas  de  execução são extremamente úteis  na  prática:  por  exemplo, um navegador deve  tratar  com vários hosts, abrir uma  janela de correio eletrônico ou ver outra  página, enquanto descarrega dados. A própria  linguagem de programação Java usa uma  linha de  execução para   fazer coleta de  lixo  em  segundo plano evitando assim o problema de gerenciar memória! Os programas GUI têm uma linha de execução separada


para  reunir eventos da interface com o usuário do ambiente operacional hospedeiro.

O que  são linhas de Execução?

Vamos começar vendo  um programa que  não  utiliza múltiplas linhas de  execução e que   como   conseqüência,  torna   difícil  para   o  usuário  realizar  várias  tarefas  com   o programa.  Após o  dissecarmos, mostraremos então como  é  fácil fazer esse programa executar  linhas  de  execução separadas.  Esse  programa anima  uma   bola  que   quica continuamente, movendo a  bola, descobrindo se ela quica contra  uma  parede e  depois redesenhando­a.

Assim que  você  clica no botão  “Start”, o programa lança uma  bola a partir do canto superior esquerdo da  tela e  a  bola começa a  quicar. A rotina de  tratamento do  botão “Start” chama o método bounce() da  Classe Ball, que  contém um  laço executado 1000 vezes. Após cada movimento, chamamos o método estático sleep da classe Thread para fazer uma pausa na bola, por 15 segundos.

class Ball {

public void bounce() {

draw();

for(int i = 1; i <= 1000; i++) {

move();

try { Thread.sleep(5);

} catch(InterruptedException e) { }

}

}

}

A chamada  Thread.sleep() não  cria  uma  nova  linha  de  execução –  sleep é  um método estático da classe Thread que  coloca a linha de execução corrente em estado de suspensão.

O  método sleep  pode   lançar  uma   exceção InterruptedException.  Vamos discutir essa  exceção e  seu  tratamento correto   posteriormente;  vamos apenas  ignorá­la,  por enquanto.

Se   você   executar  o  programa, poderá  ver  que   a  bola  quica  normalmente,  mas assume o controle completo do aplicativo. Se  você  cansar da bola quicando antes que  ela faça  isso  1000  vezes e  se der  um  clique  no  botão  “Close”,  a  bola  continuará  a  quicar. Você não pode  interagir com o programa até  que a bola tenha terminado de quicar.

Essa não  é uma  boa  situação na  teoria  ou na  prática e está se tornando cada vez mais  problemático  à  medida  que  as redes se tornam  mais  importantes.  Afinal,  quando


você  está lendo dados através de  uma  conexão de  rede, é muito comum  ficar preso em uma  tarefa demorada que  você  gostaria realmente de interromper. Por exemplo, suponha que  você  descarregue uma  imagem grande e decida, após ver uma  parte  dela, que  não precisa ou não  quer  ver o restante; você  certamente gostaria de  poder  dar um clique em um botão  “Parar” ou “Voltar” para  interromper o processo de download.

Vide o código Bounce.Java.

Usando Linhas de Execução para das uma chance às outras tarefas

...

Baixar como (para membros premium)  txt (60.8 Kb)   pdf (285.7 Kb)   docx (46.1 Kb)  
Continuar por mais 45 páginas »
Disponível apenas no TrabalhosGratuitos.com