12.07.2015 Views

k19-k11-orientacao-a.. - Departamento de Sistemas e Computação

k19-k11-orientacao-a.. - Departamento de Sistemas e Computação

k19-k11-orientacao-a.. - Departamento de Sistemas e Computação

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

THREADSA P Ê N D I C ECSe pensarmos nos programas que utilizamos comumente no dia a dia, conseguiremos chegara seguinte conclusão: um programa executa um conjunto <strong>de</strong> tarefas relativamente in<strong>de</strong>pen<strong>de</strong>ntesentre si. Por exemplo, um navegador po<strong>de</strong> baixar vários arquivos diferentes além <strong>de</strong> permitir a navegação.Um software <strong>de</strong> visualização <strong>de</strong> ví<strong>de</strong>os além <strong>de</strong> reproduzir imagens também reproduzirsons.Se pensarmos em sistemas corporativos, também chegamos na mesma conclusão: um sistemacorporativo executa um conjunto <strong>de</strong> tarefas relativamente in<strong>de</strong>pen<strong>de</strong>ntes entre si. Por exemplo, doisou mais usuários acessando o mesmo sistema para fazer coisas diferentes.Já que um programa ou um sistema corporativo executa tarefas relativamente in<strong>de</strong>pen<strong>de</strong>ntes entresi po<strong>de</strong>mos pensar em executá-las simultaneamente. A primeira gran<strong>de</strong> limitação para executartarefas simultaneamente é a quantida<strong>de</strong> <strong>de</strong> unida<strong>de</strong>s <strong>de</strong> processamento (cpu’s) disponíveis.Em geral, a regra para saber quantas tarefas po<strong>de</strong>mos executar simultaneamente é bem simples:se temos N unida<strong>de</strong>s <strong>de</strong> processamento po<strong>de</strong>mos executar no máximo N tarefas. Uma exceção aessa regra ocorre quando a tecnologia hyperthreading é aplicada. Essa tecnologia permite o aproveitamentodo tempo ocioso <strong>de</strong> uma cpu.Geralmente, a quantida<strong>de</strong> <strong>de</strong> tarefas que <strong>de</strong>sejamos executar é maior do que a quantida<strong>de</strong>s <strong>de</strong>cpu’s. Supondo que as tarefas sejam executadas sem interrupção do começo até o fim então com altaprobabilida<strong>de</strong> teríamos constantemente um cenário com todas as cpu’s ocupadas com tarefas gran<strong>de</strong>se <strong>de</strong>moradas e diversas tarefas menores que po<strong>de</strong>riam ser executadas rapidamente esperandoem uma fila. Esse cenário não é a<strong>de</strong>quado para sistema com alta interativida<strong>de</strong> com usuários poisdiminui a sua responsivida<strong>de</strong> (o efeito <strong>de</strong> uma ação do usuário <strong>de</strong>mora).Para aumentar a responsivida<strong>de</strong> das aplicações, o sistema operacional faz um revezamento dastarefas que precisam executar. Isso evita que tarefas <strong>de</strong>moradas travem a utilização das cpu’s tornandoa interativida<strong>de</strong> mais satisfatória.O trabalho do <strong>de</strong>senvolvedor é <strong>de</strong>finir quais são as tarefas que uma aplicação <strong>de</strong>ve realizar e<strong>de</strong>terminar quando elas <strong>de</strong>vem executar.Definindo Tarefas - (Runnables)Para <strong>de</strong>finir as tarefas que uma aplicação Java <strong>de</strong>ve executar, <strong>de</strong>vemos criar classes que implementama interface Runnable. Essa interface possui apenas um método (run()). O método run() éconceitualmente análogo ao método main() pois o primeiro funciona como “ponto <strong>de</strong> partida” <strong>de</strong>uma tarefa <strong>de</strong> uma aplicação o segundo funciona como “ponto <strong>de</strong> partida” <strong>de</strong> uma aplicação.Veja alguns exemplos <strong>de</strong> tarefas <strong>de</strong>finidas em Java implementando a interface Runnable:www.<strong>k19</strong>.com.br 171

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!