12 threads
-
Upload
thiago-oliveira -
Category
Education
-
view
331 -
download
0
Transcript of 12 threads
![Page 1: 12 threads](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/1.jpg)
Threads
![Page 2: 12 threads](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/2.jpg)
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](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/3.jpg)
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](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/4.jpg)
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](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/5.jpg)
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](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/6.jpg)
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](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/7.jpg)
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](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/8.jpg)
Aplicações
● Processameto paralelo
● Processamento concorrente
● Conexão com servidores
● Map/Reduce
● Aproveitamento de processadores multicore
![Page 9: 12 threads](https://reader030.fdocumentos.tips/reader030/viewer/2022020123/559788541a28abe6408b467c/html5/thumbnails/9.jpg)
Duvidas?