• Nenhum resultado encontrado

Aula 13 - Trabalhando com Threads

N/A
N/A
Protected

Academic year: 2021

Share "Aula 13 - Trabalhando com Threads"

Copied!
6
0
0

Texto

(1)

Derig Almeida Vidal, MSc. Mestre em Computação Aplicada, Engenheiro

de Produção e Tecnólogo em Automática

Prof. Derig Almeida Vidal, MSc.

SISTEMAS MONOTAREFA

• O usuário executa apenas um aplicativo de cada vez.

• Permite que o processador, a memória, e os periféricos fiquem dedicados a um único usuário;

• Problemas:

Enquanto o programa aguarda um evento o processador fica ocioso;

A memória é subutilizada;

Os periféricos estão dedicados a um único usuário.

SISTEMAS MONOTAREFA SISTEMAS MULTITAREFAS

• Possibilita uma melhor utilização:

Do processador;

Da memória; e,

(2)

Prof. Derig Almeida Vidal, MSc.

SISTEMAS MULTITAREFAS

• No sistema multiprogramado diversos programas são mantidos na memória ao mesmo tempo.

• Estes vários programas são executados simultaneamente*.

• Um único programa não ocupa toda a memória e não ocupa todo o tempo do processador.

Prof. Derig Almeida Vidal, MSc.

O QUE É UM PROGRAMA?

• É uma coleção de instruções que descrevem uma tarefa a ser realizada por um

computador.

• O termo pode ser uma referência ao código fonte, escrito em alguma linguagem de programação, ou ao arquivo que contém a forma executável deste código fonte. • Ex:

main() { int f1, f2;

printf(“Alo mundo\n”); }

O QUE É UM PROCESSO?

• Processo é um programa em execução. • É a forma pela qual o Sistema Operacional

“enxerga” um programa e possibilita a sua execução.

• É possível que vários processos executem o mesmo programa ao mesmo tempo.

Ou seja, um programa pode ter várias instâncias em execução.

Mesmo código (programa) porém dados e momentos de execução (contexto) diferentes.

O QUE É UM PROCESSO?

• O processo envolve uma série de atributos, O processo envolve uma série de atributos, O processo envolve uma série de atributos, O processo envolve uma série de atributos, como:

como:como: como:

Espaço de endereçamento

Descritores de arquivos abertos

Permissões de acesso

Área de código

Dados

Pilha de Execução

(3)

Prof. Derig Almeida Vidal, MSc.

E ENTÃO, O QUE É A THREAD? • É um fluxo de execução.

• Na maior parte das vezes, cada processo é formado por um conjunto de recursos mais uma única thread.

Prof. Derig Almeida Vidal, MSc.

E A MULTITHREADING?

• Ela associa vários fluxos de execução a um único processo.

E A MULTITHREADING?

• Threads de um mesmo processo compartilham:

Recursos

Espaço de endereçamento

Código

Dados

• Definir um novo processo envolve alocação de recursos do SO.

• Definir uma nova Thread envolve definir uma nova pilha e um novo contexto de execução dentro do processo já existente (ou seja é mais leve).

POR QUE UTILIZAR A MULTITHREADING? • Programas concorrentes que utilizam

múltiplos threads são mais rápidos do que implementados como múltiplos

(sub)processos.

• Pode melhorar o desempenho da aplicação apenas executando tarefas secundárias (background), enquanto outras operações estão sendo processadas.

• Ex: editores de texto, planilhas, aplicativos gráficos e processadores de imagens.

(4)

Prof. Derig Almeida Vidal, MSc.

POR QUE UTILIZAR A MULTITHREADING?

• Em ambientes distribuídos, as threads são

essenciais para solicitações de serviços

remotos.



Uma thread pode solicitar o serviço

remoto, enquanto a aplicação pode

continuar realizando outras atividades

úteis.



Já para o processo que atende a

solicitação, múltiplos threads permitem

que diversos pedidos sejam atendidos

concorrentemente e/ou simultaneamente.

Prof. Derig Almeida Vidal, MSc.

ESTADOS DA THREAD

EXEMPLO 01

import java.util.Calendar; import javax.swing.*;

class ThreadDemo extends JFrame { JLabel label;

public ThreadDemo(String title) { super(title);

label = new JLabel("Iniciando o relógio");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.add(label); this.setSize(300, 300); this.setVisible(true); } EXEMPLO 01

private void startCount() { try { while (true) { Thread.sleep(1000); Thread.sleep(1000); Thread.sleep(1000); Thread.sleep(1000);

Calendar agora = Calendar.getInstance(); // horas, minutos e segundos

int horas = agora.get(Calendar.HOUR); int minutos = agora.get(Calendar.MINUTE); int segundos = agora.get(Calendar.SECOND);

String horaCerta = "Hora Atual: " + String.valueOf(horas) + ":" + String.valueOf(minutos) + ":" +

String.valueOf(segundos); label.setText(horaCerta);

(5)

Prof. Derig Almeida Vidal, MSc.

EXEMPLO 01

}

} catch (InterruptedException ie) { }

label.setText(Thread.currentThread().toString()); }

public static void main(String args[]) {

ThreadDemo minhaThread = new ThreadDemo("Interface gráfica do relógio");

minhaThread.startCount(); }

}

Prof. Derig Almeida Vidal, MSc.

HERANÇA DA CLASSE THREAD

• No caso do exemplo anterior existia apenas uma única thread que era pausada por um determinado período e depois atualizava a hora, repetindo diversas vezes devido ao loop.

• Pode-se estender da classe thread e modificar seus métodos, bem como criar e executar várias threads ao mesmo tempo.

• Vejamos o exemplo nos slides a seguir.

HERANÇA (ESTENDENDO) DA CLASSE THREAD

• Agora vamos testar criar várias threads e modificar alguns de seus métodos:

class ThreadDemo extends Thread { public ThreadDemo(String name) {

super(name); start(); } public void run() {

for (int i = 0; i < 100; i++) {

System.out.print(getName()); } } public static void main(String args[]) {

ThreadDemo pnt1 = new ThreadDemo("A"); ThreadDemo pnt2 = new ThreadDemo("B"); ThreadDemo pnt3 = new ThreadDemo("C"); ThreadDemo pnt4 = new ThreadDemo("D"); }}

HERANÇA (ESTENDENDO) DA CLASSE THREAD

• Agora modifique o método run() para: for (int i = 0; i < 100; i++) {

System.out.println(getName()); try {

Thread.sleep(500); //Faz a thread dormir por 500 ms

} catch (InterruptedException ex) {

Logger.getLogger(ThreadDemo.class.getName()).log( Level.SEVERE, null, ex);

} }

(6)

Prof. Derig Almeida Vidal, MSc.

ESTENDENDO A CLASSE THREAD E

ADICIONANDO UMA INTERFACE RUNNABLE

• Em Java, usamos a classe Thread do pacote java.lang para criarmos linhas de

execução paralelas. A classe Thread recebe como argumento um objeto com o código que desejamos rodar.

• Para que isso seja possível, deve haver uma forma que determine o seu comportamento. Isso é obtido pela interface Runnable.

• Através dela informamos que A nossa classe é "executável" e que segue determinado

comportamento. Na interface Runnable, há apenas um método chamado run. Basta implementá-lo e a classeThread já saberá executar nossa classe.

Prof. Derig Almeida Vidal, MSc.

EXEMPLO

public class GeraPDF implements Runnable { public void run () { // lógica para gerar o pdf... } }

public class BarraDeProgresso implementsimplementsimplementsimplements RunnableRunnableRunnableRunnable { public void run () { // mostra barra de progresso e vai atualizando ela... } } public class MeuPrograma {

public static void main (String[] args) { GeraPDF gerapdf = new GeraPDF(); Thread threadDoPdf = newnewnewnew ThreadThreadThread(gerapdf); Thread threadDoPdf.start();start();start();start();

BarraDeProgresso barraDeProgresso = new BarraDeProgresso();

Thread threadDaBarra = new Thread(barraDeProgresso); threadDaBarra.start();

} }

COMPARTILHANDO VARIÁVEIS

• Declare na classe principal:

public static int contadorPublico = 0;

• Modifique o método run() para:

int contadorPrivado = 0;

for (int i = 0; i < 100; i++) {

System.out.println(getName()+" - Contador Público = "+contadorPublico+ " - Contador Privado = "+contadorPrivado);

contadorPrivado++; contadorPublico++;

try { ...

BIBLIOGRAFIA

• Curso JEDI JAVA. Disponível em: <http://www.dfjug.org/jedi/index.jsp>

• Osmar J. Silva. Obter a hora atual. Disponível em: <http://www.arquivodecodigos.net/dicas/java-obter-a-hora-atual-51.html>

• Caelum. Programação Concorrente e Threads. <http://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/>

Referências

Documentos relacionados

– É mais rápido terminar um thread que um processo – É mais rápido chavear entre threads de um

Rede Natura 2000 – Campo Maior: aumento da área de regadio e conservação de aves e habitats.. Albufeira

•   O  material  a  seguir  consiste  de  adaptações  e  extensões  dos  originais  gentilmente  cedidos  pelo 

A taxa do INR ideal para os paci- entes com disfunção ventricular e insuficiência cardíaca também não foi estimada por meio de estudos prospectivos e randomizados, e a taxa

Business Project – Trabalho de Conclusão de Curso 40 MÓDULOS NO BRASIL HORAS MINISTRADAS EM PORTUGUÊS HORAS MINISTRADAS EM INGLÊS.. Temas prátcos abordados neste módulo

Fato Relevante em 02/04/2018 - Aprovação pela Assembleia Geral Extraordinária realizada no dia 02/04/2018 da aquisição de 51,0% do capital social total e votante da sociedade

Como são operados os conjuntos de recalque?: Operador local em tempo parcial Como é feita a comunicação com o centro de operações. : Telefone,

Durante os primeiros cinco anos de sua existência, os projetos do Programa Sul Global da Conectas em educação, pesquisa e advocacy foram orientados para a colaboração e a