Threads. O que é uma Thread? Paralelismo

Documentos relacionados
Java Threads. Introdução

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

Concorrência em Java. Threads em Java

THREADS EM JAVA. George Gomes Cabral

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 11 - Threads e Concorrência

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

Programação Orientada a Objetos (DPADF 0063)

Execução concorrente em Java: threads. O que são Threads? Criação e métodos de Threads Sincronização Comunicação entre Threads

Gabriel de Oliveira Ramos Roland Teodorowitsch - Orientador

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

Programação concorrente em Java

Programação Concorrente em Java

Threads. Linguagem Java. Adenilso da Silva Simão 17/05/05

Utilizando Threads em Java

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

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Múltiplas Linhas de Execução Java (Threads)

Java Standard Edition (JSE)

PUC-SP Depto. de Ciência da Computação

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação. Processamento Paralelo Threads. Aluno: Wagner Palacio

Universidade da Beira Interior. Sistemas Distribuídos. Folha 4-1. Threads Daemon Threads

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Num programa em JAVA é possível definir diferentes sequências de execução independente: Threads.

Só podem ser executados por uma Thread que detenha o lock do objecto

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

Threads. Leonardo Gresta Paulino Murta

Sistemas Operacionais

Programação Paralela. Processos. Processos. Processos. Processos. Unidade 2

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Tratamento de Exceções, Multithreads e arquivos (em Java) Programação Orientada a Objetos

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

Threads e IO. Sérgio Luiz Ruivace Cerqueira

Sistemas Operacionais I Parte VI Threads

Computação Paralela. Especificação de Concorrência/Paralelismo. João Luís Ferreira Sobral Departamento do Informática Universidade do Minho

(Aula 17) Threads em Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

[Magee 1999] Concurrency State Models and Java Programs, Jeff Magee, Jeff Kramer, John Wiley 1999.

Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Fundamentos de Programaçã. ção Concorrente

Concorrência em Processos

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Processo. Prof. Paulo Cesar F. de Oliveira, BSc, PhD

O problema da herança múltipla e o uso de Interfaces. Herança múltipla. Interfaces. Definindo Interfaces 30/11/2016

Interfaces e Classes Internas

Utilização de threads em Java

Concorr^encia. A classe Thread (java.lang)

LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTE

Linguagem de Programação II Implementação

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Relacionamentos entre objetos

Prof. Silvana Rossetto 9 de julho de DCC/IM/UFRJ

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Sistemas Operacionais

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Análise de Programação

Programação Concorrente

Métodos Sincronizados

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Arquitecturas Paralelas I Computação Paralela em Larga Escala LESI - 4º Ano. Especificação de Concorrência/Paralelismo

Notas de Aula 09: Tratamento de exceções

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Programação de Computadores II TCC /Turma A 1

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Prof. Fernando V. Paulovich 8 de novembro de SCC Programação Orientada a Objetos

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Conceitos de Programação Orientada a Objetos

Linguagem de Programação II Implementação

Atributos e Métodos Estáticos

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Linguagem de Programação III

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Fundamentos de Sistemas Operacionais

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos II

Sistemas Distribuídos

Programação Orientada a Objetos II

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação de Computadores II

Linguagem de Programação IV Introdução

DCC / ICEx / UFMG. Membros de Classes. Eduardo Figueiredo.

Programação Orientada a Objetos

Palavras Reservadas da Linguagem Java

Introdução ao Java. Prof. Herbert Rausch Fernandes

Transcrição:

Threads em Java 1

O que é uma Thread? Paralelismo Threads Multi- threading é o mecanismo de concorrência suportado explicitamente pela linguagem Java. Os mecanismos de gerenciamento e sincronização de threads foram incorporados diretamente à linguagem (java.lang). Uma thread em Java é representada por um objeto da classe Thread (java.lang.thread). 2

Threads Quando uma aplicação Java é executada: A JVM cria um objeto do tipo Thread cuja tarefa a ser executada é descrita pelo método main(). A Thread é iniciada automaticamente. Os comandos descritos pelo método main() são executados sequencialmente até que o método termine e a thread acabe. 3

Threads Existem duas formas de criar explicitamente uma Thread em Java: 1. Estendendo (Herança) a classe Thread e instanciando um objeto desta nova classe. 2. Implementando a interface Runnable, e passando um objeto desta nova classe como argumento do construtor da classe Thread. Nos dois casos a tarefa a ser executada pela thread deverá ser descrita pelo método run(). 4

Estendendo a Classe Thread public class MinhaThread extends Thread { @Override public void run() { int iterations = 100; try { for (int i = 0; i < iterations; i++) { System.out.println( Imprimindo da Thread"); sleep(2000); catch (InterruptedException e) { e.printstacktrace(); System.err.println(e); 5

Estendendo a Classe Thread Para iniciar a thread é necessário instanciar um objeto da nova classe e invocar o método start() public class Main { public static void main(string[] args) { int iterations = 3; MinhaThread thread = new MinhaThread(); thread.start(); //.. // 6

A Interface Runnable Como Java não permite herança múltipla, a necessidade de estender a classe Thread restringe a criação de subclasses a partir de outras classes genéricas. Através da utilização da interface Runnable é possível criar classes que representem uma thread sem precisar estender a classe Thread. Neste caso pode- se estender outras classes genéricas. A criação de uma nova thread é feita através da instanciação de um objeto thread usando o objeto que implementa a interface Runnable. 7

A Interface Runnable public class MinhaThreadRunnable implements Runnable { private int threadid; public MinhaThreadRunnable(int id) { this.threadid = id; @Override public void run() { int contador = 10; for (int i = 0; i < contador; i++) { System.out.println("Minha Thread com a Interface Runnable id: " + this.threadid + " contador: " + i); 8

A Interface Runnable Para iniciar a thread é necessário instanciar um objeto da nova classe e criar uma Thread com este objeto. A partir disso, chamar o método start(). public class Main { public static void main(string[] args) { MinhaThreadRunnable runnable1 = new MinhaThreadRunnable(1); new Thread(runnable1).start(); //.. // 9

Escalonador Mecanismo que determina como as threads irão utilizar tempo de CPU. Somente as threads no estado runnable são escalonados para ser executados. O Java permite a atribuição de prioridades para as threads. Threads com menor prioridade são escalonados com menor frequência. 10

Estados das Threads T1 - RODANDO (running) T1 - BLOQUEADO (blocked) T1 - PRONTO (ready) 11

Prioridades Toda thread possui uma prioridade que: 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 12

Interrupção de Threads É possível interromper a thread através do método interrupt(). Neste caso, uma exceção é enviada à Thread que está rodando e a mesma deverá tratá- la ou simplesmente será finalizada. 13

Sincronização Cada thread possui uma pilha independente. Duas threads que executam o mesmo método possuem versões diferentes das variáveis locais. A memória dinâmica (heap) de um programa é compartilhada por todos as threads. Duas threads poderão portanto acessar os mesmos atributos de um objeto de forma concorrente. Devido ao mecanismo de preempção, não há como controlar o acesso a recursos compartilhados sem um mecanismo específico de sincronização. 14

Exemplo public class ContaCorrente { private float saldo = 0; private float temp; public float getsaldo(){ return saldo; public void depositar(float valor){ temp = getsaldo(); saldo = temp+valor; public void sacar(float valor){ temp = getsaldo(); saldo = temp-valor; 15

Sincronização O Java permite restringir o acesso a métodos de um objeto ou trechos de código através do modificador synchronized. Cada objeto Java possui um (e apenas um) lock. Para invocar um método synchronized é necessário adquirir (implicitamente) o lock associado ao objeto. Se dois ou mais métodos de um objeto forem declarados como synchronized, apenas um poderá ser acessado de cada vez. 16

Exemplo public class ContaCorrente { private float saldo = 0; private float temp; public float getsaldo(){ return saldo; public synchronized void depositar(float valor){ temp = getsaldo(); saldo = temp+valor; public synchronized void sacar(float valor){ temp = getsaldo(); saldo = temp-valor; 17

wait() e notifyall() O mecanismo de sincronização de Java é baseado em monitores, e utiliza uma variável condicional que é o próprio lock do objeto. As operações com monitores são representadas em Java pelos métodos wait() e notifyall(). wait() e notifyall() só podem ser usados dentro de métodos ou trechos de código synchronized, e não recebem parâmetros, já que atuam sobre o lock do objeto. 18

wait() e notifyall() Threads podem ser suspensas ao executarem o comando wait(). Ao ser suspensa dentro de um método synchronized, a thread libera imediatamente o lock do objeto correspondente. A thread suspensa só será reativada quando uma outra thread executar o comando notifyall(). Várias threads podem estar suspensas à espera do lock de um objeto. 19

Bibliografia Java Threads Introdução - PUC- Rio. Disponível em: http://www.inf.puc- rio.br/~inf1621/ java2.pdf Java e Orientação à Objetos. Caelum Ensino e Inovação. Disponível em: http:// www.caelum.com.br 20