12 threads

9
Threads

Transcript of 12 threads

Page 1: 12 threads

Threads

Page 2: 12 threads

O que é Thread

● O principal conceito de Thread está na ideia de executar mais de uma tarefa simultaneamente

● Situação comum quando executamos mais de tarefa: Navegamos na internet, digitamos um texto, assistimos um video ou escutamos música

● Quando usamos vários programas diferentes, o sistema operacional, os gerencia através de processos diferentes

● Em um programa (ou processo) só, se quisermos executar tarefas em paralelo, normalmente falamos de threads

● Nas threads, diferentes tarefas compartilham os mesmos objetos em memoria, nos processos isso não acontece

Page 3: 12 threads

Dormindo

● Podemos fazer uma thread parar momentanteamente de executar-se usando o método Thread.sleep

● Temos de especificar q quantidade de milisegundos que uma Thread deve permanecer dormente

Thread.sleep(5000)

Page 4: 12 threads

Como chama-las

● Para chamar uma nova thread (tarefa) dentro de um processo será necessario criar um objeto Thread e chamar o metodo start()

● Entretanto mesmo que isso chame uma nova tarefa será necessario especificar o que queremos executar nessa nova tarefa

● Especificamos o metodo criando uma outra classe que implemente a interface Runnable e passando-a no construtor da Thread

● Ao implementar a interface Runnable, será necessario implementar o metodo run

Page 5: 12 threads

Escalonador

● Podemos observar que a saida no exemplo proposto não necessariamente é a mesma

● Threads concorrem pelo único processador, como o mesmo só pode executar uma thread por vez, entra em cena o escalonador

● O Escalonador é o responsavel por escolher a proxima Thread a ser executada e fazer a troca de contexto

● As threads dormem e são salvas na hora da troca de contexto, para depois poderem retomar sua execução no ponto que foram interrompidas

● Não temos controle sobre o escalonador

Page 6: 12 threads

Garbage Collector

● É uma Thread responsavel por jogar fora todos os objetos não referenciados

● Ao desalocar um objeto, não se pode afirmar se ele ainda está na memoria

● O que se pode afirmar é que ao ser desalocado, em algum momento o GC irá liberar aquele epaço na memória

Page 7: 12 threads

Problemas de Concorrência

● Ao trabalhar com Threads, em algumas situações teremos uma ou mais Threads tentando acessar/modificar um recurso ao mesmo tempo

● Imagine que duas Threads estejam efetuando uma operação em ContaCorrente, uma saca e outra deposita. É possivel que uma das operações seja ignorada.

● Para evitar esse tipo de situação a palavra synchronized é utilizada

● Relembrando collections:

ArrayList != Vector

HashMap != Hashtable

Page 8: 12 threads

Aplicações

● Processameto paralelo

● Processamento concorrente

● Conexão com servidores

● Map/Reduce

● Aproveitamento de processadores multicore

Page 9: 12 threads

Duvidas?