Introdução ao     uso de Threads
          em      Java


      Daniel de Angelis Cordeiro

        Aula para a disciplina
 MAC 0438 – Programação Concorrente
Introdução
●
    Threads, também chamados de processos
    leves, permitem múltiplas atividades dentro
    de um único processo;
●
    Um mesmo processo pode conter múltiplas
    threads que parecem executar ao mesmo
    tempo;
●
    Java é a primeira linguagem de programação
    a incluir o conceito de threads na própria
    linguagem.
Por que utilizar Threads?
Há várias razões para utilizarmos threads.
Entre elas:

●
    Maior desempenho em ambientes
    multiprocessados;
●
    Responsividade em interfaces gráficas;
●
    Simplificação na modelagem de algumas
    aplicações.
Criando Threads
Há duas formas de criarmos uma thread em
 Java:


●
    Ou usamos herança e criamos uma classe
    que estende a classe Thread;


●
    Ou criamos uma classe que implementa a
    interface Runnable.
Usando Herança
Usando herança, nossa classe deve
 sobrescrever o método public void run():


class Tarefa1 extends Thread {
    public void run() {
        for(int i=0; i<1000; i++)
          System.out.println(“Usando herança”);
    }
}
Usando a Interface Runnable
A interface Runnable nos obriga a
  implementar o método public void run():

class Tarefa2 implements Runnable {
    public void run() {
        for(int i=0; i<1000; i++)
          System.out.println(“Usando
           Runnable”);
    }
}
Exemplo de Uso
Para usar as classes Tarefa1 e Tarefa2
  devemos fazer:

Thread threadComHeranca = new Tarefa1();
Thread threadComRunnable =
  new Thread(new Tarefa2());

threadComHeranca.start();
threadComRunnable.start();
Saída do Exemplo
A saída de nosso exemplo é mais ou menos
  essa:
              Usando Runnable
              Usando Herança
              Usando Herança
              Usando Runnable
              Usando Herança
              Usando Runnable
                    (...)
Estados de uma Thread
Uma thread pode estar em um dos seguintes
 estados:


●
    criada;
●
    em execução;
●
    suspensa ou
●
    morta.
Sincronismo entre Threads
●
    O uso de memória compartilhada entre as
    threads obriga o programador a sincronizar
    as ações de suas threads.
●
    Para isso, Java provê monitores ou locks.
    Imagine um lock como uma permissão para
    que apenas uma thread possa utilizar um
    recurso por vez.
●
    Cada objeto em Java possui um lock e ele
    deve ser obtido através do comando
    synchronized.
O comando synchronized

    Os seguintes usos do comando synchronized são
    equivalentes:

synchronized public void teste() public void teste() {
{                                    synchronized(this) {
    façaAlgo();                          façaAlgo();
}                                    }
                                 }
Variáveis Voláteis
Variáveis voláteis        Exemplo de código:
 possuem as
 seguintes                class VolatileTeste {
 características:
                              boolean flag;
                              public void foo() {
●
    operações atômicas;
                                  flag = false;
●
    mudanças visíveis
                                  if(flag) { (...) }
    globalmente;
                              }
●
    são instáveis.
                          }
wait(), notify() e notifyAll()
Estes métodos da classe Object implementam
  o conceito de monitores sem utilizar espera
  ativa. Ao invés disso, notificam as threads
  indicando se estas devem ser suspensas ou
  se devem voltar a ficar em execução.
O lock do objeto chamado pela thread para
 realizar as notificações será utilizado. Por
 isso, antes de chamar um dos três métodos,
 o lock deve ser obtido utilizando-se o
 comando synchronized.
wait(), notify() e notifyAll()
●
    wait() - suspende a thread que chamou o
    método até que outra thread a acorde ou até
    que o tempo especificado como argumento
    tenha passado;
●
    notify() - acorda, se existir, alguma thread
    que esteja esperando um evento neste
    objeto;
●
    notifyAll() - acorda todas as threads que
    estejam esperando neste objeto.
Mais Informações
Se mesmo depois desta maravilhosa aula você
 ainda tiver alguma dúvida, recomendo a
 leitura do texto que preparei sobre threads
 em Java (que está muito mais completo).
Para cada referência do texto coloquei um
  apontador para a página onde ela se
  encontra na internet. Assim você nem
  precisa procurar o livro na biblioteca para
  consultar.
                       :-)

Mais conteúdo relacionado

PDF
Threads
PPT
Thread Java
PDF
Java recursos avançados - multithreading
PDF
Curso de OO com C# - Parte 03 - Plataforma .NET
PDF
Visão geral sobre Assertivas e Exceções no Java7
ODP
12 threads
PDF
Gerenciando aspectos e eventos com Zend Framework 2
PDF
Java memory model primary ref. - faq
Threads
Thread Java
Java recursos avançados - multithreading
Curso de OO com C# - Parte 03 - Plataforma .NET
Visão geral sobre Assertivas e Exceções no Java7
12 threads
Gerenciando aspectos e eventos com Zend Framework 2
Java memory model primary ref. - faq

Mais procurados (20)

PDF
Listas (parte 2 de 3)
ODP
Trabalhando com eventos e serviços no Zend Framework 2
PPTX
Tratamento de exceções em Java
PDF
Java introdução ao java
PPTX
PDF
Classes abstratas e interfaces
PDF
Sistemas Distribuídos - Multithreading
PDF
POO - 22 - Tratamento de Exceções em Java
PPT
Excepções JAVA
PPTX
Estrutura de repetição
PPTX
02 controle de fluxo
PDF
Curso de OO com C# - Parte 01 - Orientação a objetos
ODP
Java 10 Classes Abstratas Interfaces
PPTX
Interface
PDF
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
PPTX
Net - Threads
ODP
Java 13 Excecoes
PPTX
Mutex and monitores
PDF
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
Listas (parte 2 de 3)
Trabalhando com eventos e serviços no Zend Framework 2
Tratamento de exceções em Java
Java introdução ao java
Classes abstratas e interfaces
Sistemas Distribuídos - Multithreading
POO - 22 - Tratamento de Exceções em Java
Excepções JAVA
Estrutura de repetição
02 controle de fluxo
Curso de OO com C# - Parte 01 - Orientação a objetos
Java 10 Classes Abstratas Interfaces
Interface
Workshop sobre programação em C usando a API Berkeley Sockets - Carlos A. M. ...
Net - Threads
Java 13 Excecoes
Mutex and monitores
Metasploit Framework: Software Livre para PoC de Vulnerabilidades
Anúncio

Semelhante a Threads em java (20)

PDF
PDF
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
PDF
Funcamentos de Programação Concorrente
PPTX
Curso de Java 9 - (Threads) Multitarefas.pptx
PDF
Programação Concorrente - Gerenciamento de Threads - Parte I
PDF
Curso de Java: Threads
PDF
05 - Sincronização de Threads - I
PDF
Aula sobre multithreading
PDF
Threads e sockets java
PDF
Threads 02: Acesso exclusivo e comunicação entre threads
PDF
Threads 01: Criação e controle de threads
PDF
threads e-sockets-em-java
PDF
Trabalhando com Threads em JAVA
PDF
[Curso Java Basico] Aula 72: Threads: notify, wait e notifyAll
PDF
Threads 03: Ciclo de vida, aplicações e boas práticas
PDF
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
PPTX
THREADS EM JAVA: INTRODUÇÃO
PDF
Programação Concorrente - Gerenciamento de Threads - Parte II
Curso Java Basico] Aula 67: Criando Threads + metodos start, run e sleep
Funcamentos de Programação Concorrente
Curso de Java 9 - (Threads) Multitarefas.pptx
Programação Concorrente - Gerenciamento de Threads - Parte I
Curso de Java: Threads
05 - Sincronização de Threads - I
Aula sobre multithreading
Threads e sockets java
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 01: Criação e controle de threads
threads e-sockets-em-java
Trabalhando com Threads em JAVA
[Curso Java Basico] Aula 72: Threads: notify, wait e notifyAll
Threads 03: Ciclo de vida, aplicações e boas práticas
[Curso Java Basico] Aula 71: Threads: metodos e blocos sincronizados (synchro...
THREADS EM JAVA: INTRODUÇÃO
Programação Concorrente - Gerenciamento de Threads - Parte II
Anúncio

Mais de Charleston Anjos (10)

PPT
Sistemas distribuídos com RMI
PDF
Apostila sql
PDF
Principais instruções em sql
PDF
Apostila php
PDF
Ajax para quem_ouviu_falar
PDF
RMI em Java
PPSX
Introdução ao java
PPTX
Introdução ao java
PPSX
Introdução ao java
Sistemas distribuídos com RMI
Apostila sql
Principais instruções em sql
Apostila php
Ajax para quem_ouviu_falar
RMI em Java
Introdução ao java
Introdução ao java
Introdução ao java

Threads em java

  • 1. Introdução ao uso de Threads em Java Daniel de Angelis Cordeiro Aula para a disciplina MAC 0438 – Programação Concorrente
  • 2. Introdução ● Threads, também chamados de processos leves, permitem múltiplas atividades dentro de um único processo; ● Um mesmo processo pode conter múltiplas threads que parecem executar ao mesmo tempo; ● Java é a primeira linguagem de programação a incluir o conceito de threads na própria linguagem.
  • 3. Por que utilizar Threads? Há várias razões para utilizarmos threads. Entre elas: ● Maior desempenho em ambientes multiprocessados; ● Responsividade em interfaces gráficas; ● Simplificação na modelagem de algumas aplicações.
  • 4. Criando Threads Há duas formas de criarmos uma thread em Java: ● Ou usamos herança e criamos uma classe que estende a classe Thread; ● Ou criamos uma classe que implementa a interface Runnable.
  • 5. Usando Herança Usando herança, nossa classe deve sobrescrever o método public void run(): class Tarefa1 extends Thread { public void run() { for(int i=0; i<1000; i++) System.out.println(“Usando herança”); } }
  • 6. Usando a Interface Runnable A interface Runnable nos obriga a implementar o método public void run(): class Tarefa2 implements Runnable { public void run() { for(int i=0; i<1000; i++) System.out.println(“Usando Runnable”); } }
  • 7. Exemplo de Uso Para usar as classes Tarefa1 e Tarefa2 devemos fazer: Thread threadComHeranca = new Tarefa1(); Thread threadComRunnable = new Thread(new Tarefa2()); threadComHeranca.start(); threadComRunnable.start();
  • 8. Saída do Exemplo A saída de nosso exemplo é mais ou menos essa: Usando Runnable Usando Herança Usando Herança Usando Runnable Usando Herança Usando Runnable (...)
  • 9. Estados de uma Thread Uma thread pode estar em um dos seguintes estados: ● criada; ● em execução; ● suspensa ou ● morta.
  • 10. Sincronismo entre Threads ● O uso de memória compartilhada entre as threads obriga o programador a sincronizar as ações de suas threads. ● Para isso, Java provê monitores ou locks. Imagine um lock como uma permissão para que apenas uma thread possa utilizar um recurso por vez. ● Cada objeto em Java possui um lock e ele deve ser obtido através do comando synchronized.
  • 11. O comando synchronized Os seguintes usos do comando synchronized são equivalentes: synchronized public void teste() public void teste() { { synchronized(this) { façaAlgo(); façaAlgo(); } } }
  • 12. Variáveis Voláteis Variáveis voláteis Exemplo de código: possuem as seguintes class VolatileTeste { características: boolean flag; public void foo() { ● operações atômicas; flag = false; ● mudanças visíveis if(flag) { (...) } globalmente; } ● são instáveis. }
  • 13. wait(), notify() e notifyAll() Estes métodos da classe Object implementam o conceito de monitores sem utilizar espera ativa. Ao invés disso, notificam as threads indicando se estas devem ser suspensas ou se devem voltar a ficar em execução. O lock do objeto chamado pela thread para realizar as notificações será utilizado. Por isso, antes de chamar um dos três métodos, o lock deve ser obtido utilizando-se o comando synchronized.
  • 14. wait(), notify() e notifyAll() ● wait() - suspende a thread que chamou o método até que outra thread a acorde ou até que o tempo especificado como argumento tenha passado; ● notify() - acorda, se existir, alguma thread que esteja esperando um evento neste objeto; ● notifyAll() - acorda todas as threads que estejam esperando neste objeto.
  • 15. Mais Informações Se mesmo depois desta maravilhosa aula você ainda tiver alguma dúvida, recomendo a leitura do texto que preparei sobre threads em Java (que está muito mais completo). Para cada referência do texto coloquei um apontador para a página onde ela se encontra na internet. Assim você nem precisa procurar o livro na biblioteca para consultar. :-)