THREADS EM JAVA. George Gomes Cabral



Documentos relacionados
Programação Orientada a Objetos em Java. Threads Threads Threads. Threads

Java Threads. Introdução

Threads e Concorrência em Java (Material de Apoio)

Threads em Java. Sistemas Operacionais - Laboratório Professor Machado

Programação Concorrente em Java. Profa Andréa Schwertner Charão DLSC/CT/UFSM

Multithreading. Programação Orientada por Objectos com Java. Ademar Aguiar. MRSC - Programação em Comunicações

(Aula 17) Threads em Java

Fundamentos de Programaçã. ção Concorrente

Universidade Federal da Paraíba

Programação Concorrente em java - Exercícios Práticos Abril 2004

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Universidade da Beira Interior. Sistemas Distribuídos

Threads. O que é uma Thread? Paralelismo

Programação Concorrente

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

Mecanismo de Threads em Java 2

Java : Comunicação Cliente-Servidor.

Threads e Sockets em Java. Threads em Java. Programas e Processos

Analisar os sistemas operacionais apresentados na figura e responder as questões abaixo: Identificar

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Concorrência em Java. Threads em Java

Aula 30 - Sockets em Java

UNIVERSIDADE FEDERAL DE VIÇOSA DEPARTAMENTO DE INFORMÁTICA. JAVA NA PRÁTICA Volume II. Alcione de Paiva Oliveira Vinícius Valente Maciel

Comandos de repetição For (inicialização; condição de execução; incremento/decremento) { //Código }

A ) O cliente terá que implementar uma interface remota. . Definir a interface remota com os métodos que poderão ser acedidos remotamente

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

(Aula 15) Threads e Threads em Java

Programação de Computadores - I. Profª Beatriz Profº Israel

insfcanceof new public switch transient while byte continue extends for int null

Computação Paralela. Uma framework para aplicações concorrentes João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

Implementando uma Classe e Criando Objetos a partir dela

Módulo 07 Características Avançadas de Classes

Processos e Threads (partes I e II)

Chamadas Remotas de Procedimentos (RPC) O Conceito de Procedimentos. RPC: Programa Distribuído. RPC: Modelo de Execução

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

Aula 04 Operadores e Entrada de Dados. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Introdução ao uso de Threads em Java

Programação Concorrente/Paralela em Java

Programação Orientada a Objetos em Java. Herança

Construção de novas Classes em Java. Classes Atributos Métodos Herança...

Programação Orientada a Objetos Threads

SISTEMAS DISTRIBUÍDOS

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

Técnicas de Programação II

Threads. Leonardo Gresta Paulino Murta

Java 2 Standard Edition Como criar classes e objetos

Programação Concorrente Conceitos Multiprogramação Threads

Prof. Esp. Adriano Carvalho

Programa de Computador que funciona em Rede

Sistemas Distribuídos

Sistemas Operacionais

Uma Introdução à Arquitetura CORBA. O Object Request Broker (ORB)

Utilizando Threads em Java

Java. Marcio de Carvalho Victorino

Prova de Java. 1) Copie o programa abaixo no eclipse e complete-o, utilizando os conceitos aprendidos durante o curso. (4 pontos)

Reuso com Herança a e Composiçã

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Threads em Java. Java Threads. Java Componentes: JVM JVM:

Programação concorrente em Java

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Sobre o Professor Dr. Sylvio Barbon Junior

Acesso a Banco. Conexão em Java. Conexão em Java. Programação Orientada a Objetos Profa. Cristiane e Prof. Daniel

(ou seja, boas praticas de programação orientada a objetos devem ser empregadas mesmo se não foram explicitamente solicitadas)

NetBeans. Conhecendo um pouco da IDE

Enterprise Java Beans

Tutorial RMI (Remote Method Invocation) por Alabê Duarte

Udesc/Ceplan Bacharelado em Sistemas de Informação Sistemas Operacionais. Prof. Alexandre Veloso

2 Orientação a objetos na prática

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

Programação Orientada a Objetos em java. Polimorfismo

Capítulo 4. Packages e interfaces

INF1013 MODELAGEM DE SOFTWARE

SCALA + AKKA. programação multithread de maneira fácil Introdução ao

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Projeto de Software Orientado a Objeto

FBV - Linguagem de Programação II. Um pouco sobre Java

Introdução a Threads Java

Threads, Gerenciamento de Threads. Pool de Threads, Grupo de Threads Variáveis Locais à Threads

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

Sistemas Distribuídos

Threads Aula 04 2 Quadrimestre

Programação Orientada a Objetos (DPADF 0063)

Objetos Distribuídos - Programação Distribuída Orientado a Objetos. Luiz Affonso Guedes

BC1518-Sistemas Operacionais. Prof. Marcelo Z. do Nascimento

Programação Orientada a Objetos (DPADF 0063)

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Java 2 Standard Edition. Fundamentos de. Objetos Remotos. Helder da Rocha

Invocação de Métodos Remotos

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Tópicos da Aula. Classes e Objetos. Classe Pública em Java. Classes em Java. Assinatura de Métodos. Corpo de Classes e Métodos. Conceitos de classe

Programação Orientada a Objetos em Java

Transcrição:

THREADS EM JAVA George Gomes Cabral

THREADS Fluxo seqüencial de controle dentro de um processo. Suporte a múltiplas linhas de execução permite que múltiplos processamentos ocorram em "paralelo" (em computadores com um processador, os threads não são executados em paralelo e, sim, concorrentemente).

THREADS Várias threads em várias CPUs Tarefa 1 Tarefa 2 Tarefa 3 Várias threads Tarefa 1 compartilhando Tarefa 2 uma única CPU Tarefa 3

THREADS Queremos escrever programas que possam fazer várias tarefas simultaneamente. baixar uma imagem pela rede. requisitar um relatório atualizado do estoque. rodar várias animações. tudo ao mesmo tempo. Cada thread representa a execução de uma sequência de comandos independentes.

THREADS EM JAVA Suporte a multithreading faz parte da linguagem. Todo programa é executado em pelo menos uma thread. class UmaUnicaThread class UmaUnicaThread { public static void main(string[] args) { // main() é executado em um única thread System.out.println(Thread.currentThread()); for (int i=0; i<30; i++) System.out.println("i == " + i); } }

EXEMPLO class CountThread extends Thread { int from, to; public CountThread(int from, int to) { this.from = from; this.to = to; } public void run() { for (int i=from; i<to; i++) } O método run( ) é como se fosse um main( ), só que não é estático System.out.println("i == " + i); } public static void main(string[] args) { // Dispara 5 threads, cada uma irá contar 10 vezes for (int i=0; i<5; i++) { CountThread t = new CountThread(i*10, (i+1)*10); t.start(); } }

EXEMPLO main 0..9 10..19 20.29 30..39 40..49

THREADS - API Thread() Classe Thread possibilita a criação de um objeto executável. void run() invocado pelo sistema de execução da JVM. deve-se sobrescrever este método para prover o código a ser executado pela thread. void start() inicia a thread e provoca a chamada de run(). void stop() para a execução da thread. void suspend() suspende a execução da thread. void resume() retoma a execução interrompida por um suspend().

THREADS - API static void sleep(long millis) throws InterruptedException põe a thread para dormir por um tempo em milisegundos. void interrupt() interrompe a thread em execução. static boolean interrupted() testa se a thread foi interrompida.

THREADS - API boolean isalive() testa se a thread está rodando. void setpriority(int p) define a prioridade de execução da thread. void yield() indica ao gerenciador de threads que esta é uma boa hora para rodar outras threads. void join() espera que uma thread termine sua execução.

ESTADOS DE UMA THREAD

ESTADOS DE UMA THREAD New Uma nova thread é um objeto thread vazio; nenhum recurso do sistema foi alocado ainda. Chamar qualquer método além de start() resulta em uma IllegalThreadStatException. Runnable Uma thread entra no estado Runnable depois da invocação do método start(). O método start() aloca recursos do sistema e chama o método run() da thread. Not Runnable Uma thread se encontra no estado Not Runnable quando... (continua)

ESTADOS DE UMA THREAD O método sleep() é invocado O método wait() é invocado A thread está esperando uma operação de entrada e saída. A thread se torna Runnable novamente quando... O número de milissegundos do método sleep() se passou Quando a condição por que ele está esperando mudou e ele recebe uma mensagem notify() ou notifyall() Quando a operação de I/O se completa Dead O método run se completa O método destroy é executado

THREADS DE USUÁRIO X DEAMONS Se estiver associada a outra thread, terminará juntamente com ela. minhathread.setdeamon(true). Uma thread do tipo deamon roda sempre como um pano de fundo da thread que a criou. Uma thread deamon termina quando a thread que a criou também terminar. Uma thread que não é uma deamon é chamada de thread de usuário.

THREADS DE USUÁRIO X DEAMONS...main(...)... thread1.setdeamon(true); thread1.start(); thread2.setdeamon(true); thread2.start(); thread3.start(); Serão automaticamente finalizadas quando o método main( ) for finalizado Pode continuar a execução mesmo após o final de main( ) return;

UMA CLASSE EXECUTÁVEL As vezes pode não ser conveniente criar uma subclasse de Thread. também não será possível devido ao mecanismo de herança implementado em Java. A interface Runnable adiciona o método run() sem herdar nada de Thread. public interface Runnable { public void run(); }

EXEMPLO class CountThreadRun implements Runnable { int from, to; public CountThreadRun(int from, int to) { this.from = from; this.to = to; } } public void run() { for (int i = from; i < to; i++) System.out.println("i == " + i); }

EXEMPLO Para executar como uma thread: // Cria uma instância de Runnable Runnable r = new CountThreadRun(10,20); // Cria uma instância de Thread Thread t = new Thread(r); // inicia a execução da thread t.start();

EXEMPLO /* Este programa cria uma classe chamada MultiplaImpressao*/ public class MultiplaImpressao implements Runnable { Thread threaddaclasse; String string; int contador; int tempodormindo; /* método construtor da classe */ public MultiplaImpressao(String s, int quantasvezes, int dormir) { contador = quantasvezes; string = s; tempodormindo = dormir; threaddaclasse = new Thread(this); threaddaclasse.start(); } /* Fim do metodo construtor */

EXEMPLO public void run() { while (contador > 0) { System.out.println(string + " - "+ contador); try { Thread.sleep(tempoDormindo); } catch (Exception e) {} contador--; } /* fim-while */ } /* Fim do metodo run */ public static void main(string args[]) { new MultiplaImpressao("ping", 5, 300); new MultiplaImpressao("pong", 5, 500); } /* Fim do metodo main */ } /* Fim da classe MultiplaImpressaoThread */

CONSTRUTORES public Thread(); public Thread(Runnable target); public Thread(String name); public Thread(Runnable target, String name); public Thread(ThreadGroup group, Runnable target); public Thread(ThreadGroup group, String name); public Thread(ThreadGroup group, Runnable target, String name);

PRIORIDADE Cada thread apresenta uma prioridade de execução. pode ser alterada com setpriority(int p) pode ser lida com getpriority() Algumas constantes incluem: Thread.MIN_PRIORITY Thread.MAX_PRIORITY Thread.NORM_PRIORITY o padrão é Thread.NORM_PRIORITY

AGRUPANDO THREADS Pode-se operar as threads como um grupo. pode-se parar ou suspender todas as threads de uma só vez. group.stop(); ThreadGroup g = new ThreadGroup("um grupo de threads");

AGRUPANDO THREADS Inclua uma thread em um grupo através do construtor da thread. Thread t = new Thread(g,new ThreadClass(), "Esta thread");

AGRUPANDO THREADS Para saber quantas threads em um grupo estão sendo executadas no momento, podemos usar o método activecount(): System.out.println("O número de threads "+ " que podem estar rodando é "+ g.activecount());

SINCRONIZAÇÃO O que acontece caso tenhamos duas threads que irão executar o mesmo código a seguir? Ambas as threads estão acessando o mesmo objeto. int cnt = Contador.incr();

SINCRONIZAÇÃO - SITUAÇÃO 1 Thread 1 Thread 2 count cnt = Contador.incr(); --- 0 n = conta; --- 0 conta = n + 1; --- 1 return n; --- 1 --- cnt = Contador.incr(); 1 --- n = conta; 1 --- conta = n + 1; 2 --- return n; 2

SINCRONIZAÇÃO SITUAÇÃO 2 Thread 1 Thread 2 count cnt = Contador.incr(); --- 0 n = conta; --- 0 --- cnt = Contador.incr(); 0 --- n = conta; 0 --- conta = n + 1; 1 --- return n; 1 conta = n + 1; --- 1 return n; --- 1

MONITORES public class Contador2 { private int conta = 0; } public synchronized int incr() { int n = conta; } conta = n + 1; return n; Não permite que este método seja executado por mais de uma thread ao mesmo tempo

MONITORES Também podemos usar monitores para partes de um método. synchronized(oobjeto) Indique o recurso a ser monitorado sentença; // Sincronizada em relação a oobjeto

MONITORES void metodo(umaclasse obj) { synchronized(obj) { obj.variavel = 5; } } Ninguém poderá usar este objeto enquanto estivermos executando estas operações