SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
Threads
Concorrência(synchronized e atomicidade),
Semaphores e thread issues
As threads são usada para que dois ou mais processos possam ser executados
ao mesmo tempo, e a manipulação delas é feita pela classe Thread, ou interface
Runnable.
● Interface Runnable: interface funcional com o método abstrato run();
● Classe Thread: classe que implementa a interface Runnable, e utiliza seu
construtor para iniciar uma thread, possuindo métodos para manipulação de
threads como: start(), sleep() e currentThread().
Synchronized
Acontece quando duas ou mais threads são executadas e acessam o mesmo
recurso ao mesmo tempo, o que pode levar a uma race condition.
Para evitar essa situação, é usada a palavra-chave synchronized (na assinatura
do método ou um bloco de código) que faz com que somente uma thread possa
acessar aquele recurso por vez.
O que gera uma perda de performance, já que vai criar uma fila de threads para
acessar aquele recurso.
Exemplo: https://github.com/pedrohubner/estudos/blob/master/Codigos/src/main/java/com/threads/sync/Counter.java
Exemplo Synchronized
Atomicidade
Para evitar a queda de performance que o synchronized gera, se usa as variáveis
atômicas (como AtomicInteger).
Que permite que duas ou mais threads acessem determinando recurso sem criar
uma fila de um acesso por vez e sem que haja conflitos dos valores dos recursos,
já que utilizando as variáveis atômicas, qualquer alteração é salva diretamente na
memória.
Exemplo:
https://github.com/pedrohubner/estudos/blob/master/Codigos/src/main/java/com/threads/atomic/Counter.java
Exemplo Atomicidade
Semaphore
A classe Semaphore possui métodos que limitam a quantidade de Threads que
poderão acessar determinado recurso.
● Semaphore(int permits): construtor em que é definido quantas threads
poderão ter acesso a algum recurso ao mesmo tempo;
● acquire(): método que dá permissão à thread de acessar determinado
recurso, caso o número de permissões já tenha sido atingido, uma fila de
threads é criada esperando a próxima permissão;
● release(): método responsável por “avisar” que uma thread terminou de
utilizar o recurso, dando permissão à próxima thread.
Exemplo: https://github.com/pedrohubner/shoppingcart/blob/master/src/main/java/com/app/thread/CartThread.java
Exemplo Semaphore
Thread issues
● Race condition: quando há a concorrência de duas threads tentando
acessar um mesmo recurso, ao mesmo tempo, e alterar seu valor.
● Deadlock: acontece quando uma thread-1 espera uma thread-2 liberar o
acesso ao recurso, porém, a thread-2 também está esperando a thread-1
liberar o acesso, o que faz com que nenhuma das duas seja executada.
Exemplo Racecondition
Exemplo DeadLock
Threads, Concorrência e Sincronização

Mais conteúdo relacionado

Mais procurados

Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faqPedro De Almeida
 
Apresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, DeadlockApresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, DeadlockWilliams Gomes da Silva
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streamsArmando Daniel
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)Helder da Rocha
 
Aula 10 - Exclusão Mútua e Região Crítica
Aula 10 - Exclusão Mútua e Região CríticaAula 10 - Exclusão Mútua e Região Crítica
Aula 10 - Exclusão Mútua e Região Críticacamila_seixas
 
Sistemas Operacionais 10 comunicação entre processos
Sistemas Operacionais 10   comunicação entre processosSistemas Operacionais 10   comunicação entre processos
Sistemas Operacionais 10 comunicação entre processosMauro Duarte
 

Mais procurados (8)

Java memory model primary ref. - faq
Java memory model   primary ref. - faqJava memory model   primary ref. - faq
Java memory model primary ref. - faq
 
Apresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, DeadlockApresentação Semáforos, monitores, troca de mensagens, Deadlock
Apresentação Semáforos, monitores, troca de mensagens, Deadlock
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streams
 
Java Memory Model (2005)
Java Memory Model (2005)Java Memory Model (2005)
Java Memory Model (2005)
 
Aula 10 - Exclusão Mútua e Região Crítica
Aula 10 - Exclusão Mútua e Região CríticaAula 10 - Exclusão Mútua e Região Crítica
Aula 10 - Exclusão Mútua e Região Crítica
 
Sistemas Operacionais 10 comunicação entre processos
Sistemas Operacionais 10   comunicação entre processosSistemas Operacionais 10   comunicação entre processos
Sistemas Operacionais 10 comunicação entre processos
 
OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Mutex and monitores
Mutex and monitoresMutex and monitores
Mutex and monitores
 

Semelhante a Threads, Concorrência e Sincronização

Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...rafaelov
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreadingBianca Dantas
 
Trabalhando com Threads em JAVA
Trabalhando com Threads em JAVATrabalhando com Threads em JAVA
Trabalhando com Threads em JAVAMarcio Palheta
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Charles Fortes
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadMario Guedes
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsHelder da Rocha
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e FuturesHelder da Rocha
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoAlexandre Duarte
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...rafaelov
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Gerências de Processos: Threads
Gerências de Processos: ThreadsGerências de Processos: Threads
Gerências de Processos: ThreadsAlexandre Duarte
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsHelder da Rocha
 

Semelhante a Threads, Concorrência e Sincronização (20)

Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
Apresentação do artigo THREADS: O PROBLEMA DOS LEITORES E ESCRITORES IMPLEMEN...
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Trabalhando com Threads em JAVA
Trabalhando com Threads em JAVATrabalhando com Threads em JAVA
Trabalhando com Threads em JAVA
 
Threads - .Net Framework 4.0
Threads - .Net Framework 4.0Threads - .Net Framework 4.0
Threads - .Net Framework 4.0
 
Threads em java
Threads em javaThreads em java
Threads em java
 
Aula java[1]
Aula java[1]Aula java[1]
Aula java[1]
 
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-ThreadDelphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
Delphi Conference 2012 - Controlando a Concorrência em Aplicações Multi-Thread
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threads
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Gerências de Processos: Sincronização
Gerências de Processos: SincronizaçãoGerências de Processos: Sincronização
Gerências de Processos: Sincronização
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
Artigo Threads O Problema Dos Leitores E Escritores Implementado Em C# Rafael...
 
Java 13
Java 13Java 13
Java 13
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Gerências de Processos: Threads
Gerências de Processos: ThreadsGerências de Processos: Threads
Gerências de Processos: Threads
 
Tag Libraries e JSTL
Tag Libraries e JSTLTag Libraries e JSTL
Tag Libraries e JSTL
 
Threads 01: Criação e controle de threads
Threads 01: Criação e controle de threadsThreads 01: Criação e controle de threads
Threads 01: Criação e controle de threads
 

Mais de Pedro Hübner

Mais de Pedro Hübner (8)

Tomcat
TomcatTomcat
Tomcat
 
Testes
TestesTestes
Testes
 
Gradle
GradleGradle
Gradle
 
Mockserver
MockserverMockserver
Mockserver
 
Semana dois
Semana doisSemana dois
Semana dois
 
Boas práticas para desenvolvimento de software
Boas práticas para desenvolvimento de softwareBoas práticas para desenvolvimento de software
Boas práticas para desenvolvimento de software
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Semana um
Semana umSemana um
Semana um
 

Threads, Concorrência e Sincronização

  • 2. As threads são usada para que dois ou mais processos possam ser executados ao mesmo tempo, e a manipulação delas é feita pela classe Thread, ou interface Runnable. ● Interface Runnable: interface funcional com o método abstrato run(); ● Classe Thread: classe que implementa a interface Runnable, e utiliza seu construtor para iniciar uma thread, possuindo métodos para manipulação de threads como: start(), sleep() e currentThread().
  • 3. Synchronized Acontece quando duas ou mais threads são executadas e acessam o mesmo recurso ao mesmo tempo, o que pode levar a uma race condition. Para evitar essa situação, é usada a palavra-chave synchronized (na assinatura do método ou um bloco de código) que faz com que somente uma thread possa acessar aquele recurso por vez. O que gera uma perda de performance, já que vai criar uma fila de threads para acessar aquele recurso. Exemplo: https://github.com/pedrohubner/estudos/blob/master/Codigos/src/main/java/com/threads/sync/Counter.java
  • 5. Atomicidade Para evitar a queda de performance que o synchronized gera, se usa as variáveis atômicas (como AtomicInteger). Que permite que duas ou mais threads acessem determinando recurso sem criar uma fila de um acesso por vez e sem que haja conflitos dos valores dos recursos, já que utilizando as variáveis atômicas, qualquer alteração é salva diretamente na memória. Exemplo: https://github.com/pedrohubner/estudos/blob/master/Codigos/src/main/java/com/threads/atomic/Counter.java
  • 7. Semaphore A classe Semaphore possui métodos que limitam a quantidade de Threads que poderão acessar determinado recurso. ● Semaphore(int permits): construtor em que é definido quantas threads poderão ter acesso a algum recurso ao mesmo tempo; ● acquire(): método que dá permissão à thread de acessar determinado recurso, caso o número de permissões já tenha sido atingido, uma fila de threads é criada esperando a próxima permissão; ● release(): método responsável por “avisar” que uma thread terminou de utilizar o recurso, dando permissão à próxima thread. Exemplo: https://github.com/pedrohubner/shoppingcart/blob/master/src/main/java/com/app/thread/CartThread.java
  • 9. Thread issues ● Race condition: quando há a concorrência de duas threads tentando acessar um mesmo recurso, ao mesmo tempo, e alterar seu valor. ● Deadlock: acontece quando uma thread-1 espera uma thread-2 liberar o acesso ao recurso, porém, a thread-2 também está esperando a thread-1 liberar o acesso, o que faz com que nenhuma das duas seja executada.