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

Gabriel de Oliveira Ramos Roland Teodorowitsch - Orientador

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

Programação concorrente 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)

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

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

MULTITHREADING. Prof.: Michele Nasu Tomiyama Bucci

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

Sistemas Operacionais I Parte VI Threads

(Aula 17) Threads em Java

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

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

Fundamentos de Programaçã. ção Concorrente

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

Utilização de threads em Java

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

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

Tipos, Literais, Operadores

Tipos, Literais, Operadores

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

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

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

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

Conceitos de Programação Orientada a Objetos

Programação Orientada a Objetos II

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

Linguagem de Programação IV Introdução

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