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
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)
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
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
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
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
Aplicações

●   Processameto paralelo
●   Processamento concorrente
●   Conexão com servidores
●   Map/Reduce
●   Aproveitamento de processadores multicore
Duvidas?

12 threads

  • 1.
  • 2.
    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
  • 3.
    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)
  • 4.
    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
  • 5.
    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
  • 6.
    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
  • 7.
    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
  • 8.
    Aplicações ● Processameto paralelo ● Processamento concorrente ● Conexão com servidores ● Map/Reduce ● Aproveitamento de processadores multicore
  • 9.