programação concorrente - curso completo

116
ANHANGUERA – 2016.1 PROGRAMAÇÃO CONCORRENTE CURSO COMPLETO Prof. Thomás da Costa [email protected]

Upload: thomas-da-costa

Post on 12-Apr-2017

470 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Programação Concorrente - Curso Completo

ANHANGUERA – 2016.1

PROGRAMAÇÃO CONCORRENTECURSO COMPLETO

Prof. Thomás da [email protected]

Page 2: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

• MBA em Arquitetura de Soluções pela FIAP.• Graduado em Gestão em Tecnologia da Informação pela UNIP.• 20 anos de experiência na área de Informática.• 15 anos de experiência com desenvolvimento em Java.• Sun Certified Programmer for the Java Platform (SCJP).• Desenvolvimento e arquitetura de aplicações em várias áreas.• Experiência profissional com várias linguagens e ferramentas de

desenvolvimento Java.• Atualmente envolvido em projetos com BigData e FastData.

Prof. Thomás da Costa

Page 3: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

https://www.facebook.com/ProfThomasDaCosta

https://br.linkedin.com/in/thomasdacosta

http://pt.slideshare.net/thomasdacosta

[email protected]

https://github.com/thomasdacosta

Prof. Thomás da Costa

https://professorthomasdacosta.wordpress.com

Page 4: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Avaliação

APRESENTAÇÃO

• Média para Aprovação: 6,0 PONTOS.• Arredondamento: uma casa decimal (5,85 = 5,9).• Prova substitutiva substitui a nota da B2.• Frequência: mínimo 75%, abaixo disso REPROVA.• Lista de Presença: TEREMOS CHAMADA.

Page 5: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

Média

70% Prova Obrigatória

30% Trabalho

70% Prova Obrigatória

30% Trabalho

Page 6: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

Avaliação• Avaliação B1

• Trabalho em Grupo (máximo 5 pessoas)• 3,0 PONTOS.• TEMA DO TRABALHO:

• Lista de exercícios.• Será encaminhada para o representante de sala.

• Data de Entrega Final: Dia da Prova.• Após essa data o trabalho vale 1,5 PONTO.

• Prova• 7,0 PONTOS.

Page 7: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

Avaliação• Avaliação B2

• Trabalho Individual• 3,0 PONTOS.• TEMA DO TRABALHO:

• Lista de exercícios.• Será encaminhada para o representante de sala.

• Data de Entrega Final: Dia da Prova.• Após essa data o trabalho vale 1,5 PONTO.

• Prova• 7,0 PONTOS.

Page 8: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

• Horário de Aula: 19h10 – 20h50 e 21h10 – 22h00.• Celulares desligados, atendam fora da sala caso precisem.• Controlem as conversas paralelas !!!• Controle o WhatsApp e os jogos !!! • A todos estarei a disposição para tirar dúvidas !!!!• Vamos ter uma aula animada.• Participação de todos na aula.• É uma disciplina complexa, por isso mantenha a atenção.

Avisos

Estou aqui para fazer uma excelente aula e prepará-los para o mercado de trabalho

Page 9: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

• Vamos estudar os princípios básicos.• Programação simultânea.• Execução de threads.• Processos computacionais paralelos.• Dias atuais os sistemas processam informações paralelas.• Os sistemas possuem controle dos processamentos.• Quantidade alta de usuários simultâneos.

O que é Programação Concorrente?Mundo simultâneo:

Page 10: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

Vamos pensar:• Em uma única conta corrente podemos ter vários acessos simultâneos?• Como controlamos o acesso as informações para que o saldo se mantenha

correto no final da operação?

Em Programação Concorrente vamos entender o funcionamento de processos computacionais simultâneos.

O que é Programação Concorrente?

Page 11: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

• Conceitos básicos.• Processos concorrentes.• Sincronização.• Semáforos.

O que vamos aprenderOnde tudo começa:

Vamos ver o PEA. !!!

Page 12: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

PEAConceitos básicos de sistemas operacionais e multiprogramação.

Tipos de sistemas operacionais. Linguagens para programação concorrente;

Conceitos de Interrupção.

Processos concorrentes.

Sincronização.

Deadlocks.

Multithreading, controle e sincronização.

Tratamento de sinais.

Mecanismos de IPC (Inter Process Comunication)

Semáforos.

Memória compartilhada.

Page 13: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

• Conteúdo da aula nos seguintes sites:

https://professorthomasdacosta.wordpress.com/

https://www.facebook.com/ProfThomasDaCosta/

http://pt.slideshare.net/thomasdacosta/presentations

• Será disponibilizado 1 dia depois da aula.• Não esqueçam de sempre baixar o material da aula quando

disponibilizado.• Siga os sites acima e a página do Facebook para ficar atualizado sobre o

material e outros assuntos relacionados a tecnologia.• Aula totalmente teórica, não utilizaremos de laboratório durante o curso.• E-mail do Professor: [email protected]

Material da Aula

Page 14: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

Bibliografias UtilizadasTANENBAUM, Andrew S; STEEN, Maarten Van. Sistemas distribuídos: princípios e paradigmas. 2ª ed. São Paulo: Pearson - Prentice Hall, 2010.

Page 15: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

APRESENTAÇÃO

Vamos iniciar nosso curso !!!

Na próxima aula !!!

Page 16: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

A TECNOLOGIA JAVA

SISTEMAS OPERACIONAIS

Page 17: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

É um programa que controla as funcionalidades de um determinado hardware e executa um conjunto de softwares de acordo com o seu objetivo. Provê uma interface intuitiva para um determinado nível de usuário.

Sistema OperacionalO que é?:

SISTEMAS OPERACIONAIS

Page 18: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

• Controlar recursos de hardware:• CPU.• Memória.• E/S.

• Controlar recursos de software:• Sistemas de Arquivos.• Processos.• Execução dos programas.

• Gerenciar os recursos da melhor forma possível.• Controle de usuários.• Possuem um Kernel.

Sistemas OperacionaisObjetivos:

SISTEMAS OPERACIONAIS

Page 19: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

• São complexos.• Multiprogramação.• Possuem processos.• Executa vários programas simultâneos.• Processamento rápido mostra a impressão de execução ao mesmo tempo.• Sincronização entre processos.• Memória Virtual (Parece que a memória não tem fim !!!)• Embarcados.• Virtualizados.

Sistemas OperacionaisDias atuais:

SISTEMAS OPERACIONAIS

Page 20: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Em nossa disciplina, vamos estudar uma API de alto nível que utiliza de recursos do Sistema Operacional para trabalhar com vários processos simultâneos. Neste conjunto de API, possuímos funcionalidades para controlar os processos, iniciar, parar e sincroniza-los.

Detalhes:

SISTEMAS OPERACIONAIS

Sistemas Operacionais

Page 21: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SISTEMAS OPERACIONAIS

Sistemas Operacionais

Page 22: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

A TECNOLOGIA JAVA

A TECNOLOGIA JAVA

Page 23: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

• Originalmente criado para dispositivos embarcados.• Iniciou a partir Projeto Green em Junho de 1991 por James Gosling, Mike

Sheridan and Patrick Naughton.• Denominada inicialmente de Oak.• Desenvolvido por James Gosling na Sun Microsystems em 1995.• Em 1996 foi lançado a primeira versão do JDK 1.0.

• Premissas da Linguagem:• Sem ponteiros (todos ficamos felizes).• Independente de plataforma.• Recurso de garbage collector.• Alta confiabilidade.• Bytecodes.

HistóricoOrigens:

A TECNOLOGIA JAVA

Page 24: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

A TECNOLOGIA JAVA

Fonte: http://viralpatel.net/blogs/java-virtual-machine-an-inside-story/

Page 25: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Tem como principal funcionalidade executar os bytecodes gerado a partir dos códigos Java, tornando a linguagem independente de plataforma. Além disso a JVM possui outras responsabilidades:

• Gerenciamento de memória.• Controle de threads.• Comunicação com o Sistema Operacional e acessar métodos nativos.• Pode executar outras linguagens além do Java como Groovy, Jython e JRuby.

JVMJava Virtual Machine:

A TECNOLOGIA JAVA

Page 26: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

A TECNOLOGIA JAVA

Java Platform Standard Edition 7

Fonte: http://docs.oracle.com/javase/7/docs/index.html

Page 27: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

• Funcionamento de um programa Java.• Variáveis.• Condicionais.• Laços.• Vetores.• String.• Não vamos entrar em detalhes na Orientação a Objetos.• Precisamos conhecer somente como instanciar uma classe para a nossa

disciplina.• E... Conhecer Lógica de Programação !!!

JavaO que vamos ver na revisão:

A TECNOLOGIA JAVA

Vamos começar !!!

Page 28: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Exemplo 01

package edu.anhanguera.poo.aula03; public class Exemplo01 {

public static void main(String[] args) {System.out.println("Olá Pessoal.

Tudo Bem?");}

 }

Page 29: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo02 {

public static void main(String[] args) {// É uma forma de criar comentários em linha.

System.out.println("Imprimindo na saida do console");System.err.println("Imprimindo na saida de erro do

console");System.out.print("Está forma não pula linha");System.err.format("Saida %s formatada", new

String("é"));System.out.format("Esta %s também é formatada", new

String("saida"));

// O método abaixo possui o conceito de varargsSystem.out.format("%s formatada %s vários %s",

new String("Saida"),

new String("com"),

new String("paramêtros"));

} }

Exemplo 02

Page 30: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo03 {

public static void main(String[] args) {int varInt;double varDouble;float varFloat;long varLong;boolean varBoolean;byte varByte;short varShort;

varInt = 2015;varDouble = 768.35;varFloat = 3.14159265f;varLong = 250000000l;varBoolean = true;varByte = 8;varShort = 3;

 System.out.println("int: " + varInt);System.out.println("double: " + varDouble);System.out.println("float: " + varFloat);System.out.println("long: " + varLong);System.out.println("boolean: " + varBoolean);System.out.println("byte: " + varByte);System.out.println("short: " + varShort);

} }

Exemplo 03

Page 31: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo04 {

public static void main(String[] args) {double media = 0;double notaB1 = 5;double notaB2 = 6;

media = (notaB1 * 0.4) + (notaB2 * 0.6);

if (media >= 6) {System.out.println("Aprovado");

} else {System.out.println("Reprovado");

}

System.out.println(media >= 6 ? "Aprovado" : "Reprovado");

} }

Exemplo 04

Page 32: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo05 {

public static void main(String[] args) {boolean ligar = true;if (ligar)

System.out.println("Ligado");

if (!ligar)System.out.println("Desligado");

float soma;float operador1 = 788.00f;float operador2 = 3.58f;

soma = operador1 + operador2;if (soma == 791.58f) {

System.out.println("Resultado da soma é " + soma);

}}

 }

Exemplo 05

Page 33: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo06 {

public static void main(String[] args) {String nomeGuerreiro = "Blackwall";String nomeMago = new String("Solas");

System.out.println("Guerreiro:" + nomeGuerreiro);System.out.println("Mago:" + nomeMago);System.out.println("Tamanho:" +

nomeGuerreiro.length());System.out.println("Tamanho:" + nomeMago.length());

if (!nomeGuerreiro.equals(nomeMago)) {System.out.println("Os nomes são

diferentes.");} else {

System.out.println("Os nomes são iguais.");}

nomeGuerreiro = nomeGuerreiro.toUpperCase();nomeMago = nomeMago.toLowerCase();

System.out.println("Guerreiro:" + nomeGuerreiro);System.out.println("Mago:" + nomeMago);

} }

Exemplo 06

Page 34: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo07 { 

public static void main(String[] args) {char linguagem[] = { 'J', 'a', 'v', 'a' };String java = "";

for (int i=0;i<=linguagem.length-1;i++) {java += linguagem[i];

}System.out.println("Linguagem " + java);

int notas[] = new int[2];notas[0] = 6;notas[1] = 7;

int i=0;while (i <= notas.length-1) {

System.out.println("Nota " + (i + 1) + ":" + notas[i]);

i++;}

boolean ligado = true;do {

System.out.println("Ligado");ligado = false;

} while (ligado);}

}

Exemplo 07

Page 35: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; public class Exemplo08 { 

public static void main(String[] args) {Integer varInt = 2015;Double varDouble = 768.35;Float varFloat = 3.14159265f;Long varLong = 250000000l;Boolean varBoolean = true;Byte varByte = 8;Short varShort = 3;

System.out.println("int: " + varInt);System.out.println("double: " + varDouble);System.out.println("float: " + varFloat);System.out.println("long: " + varLong);System.out.println("boolean: " + varBoolean);System.out.println("byte: " + varByte);System.out.println("short: " + varShort);

String valor = "100";varInt = Integer.parseInt(valor);

System.out.println("Valor convertido:" + valor);

}

}

Exemplo 08

Page 36: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.poo.aula03; import java.util.Scanner; public class Exemplo09 { 

public static void main(String[] args) {double notaB1;double notaB2;double media;Scanner scanner = new Scanner(System.in);

System.out.println("Digite a nota da B1:");notaB1 = scanner.nextDouble();

System.out.println("Digite a média:");media = scanner.nextDouble();

notaB2 = (media - (notaB1*0.4)) / 0.6;System.out.println("Nota necessária para

aprovação:" + notaB2);

scanner.close();}

}

Exemplo 09

Page 37: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

THREADS

THREADS

Page 38: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

THREADS

ThreadsDetalhes:• No desenvolvimento de software, precisamos muitas vezes efetuar

operações paralelas.• Executando operações paralelas, nosso programa continua seu

processamento natural enquanto espera a conclusão de outras atividades.• Os processos paralelos podem ser definidos como um fluxo de controle

ativo dentro do nosso programa.

Page 39: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

THREADS

Threads

Processo 1

Processo 2

Processo 3

Sem Threads

Processo 1

Processo 2

Processo 3

Programa Principal

Com Threads

Page 40: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsO que é?:

THREADS

É fluxo alternativo e ativo dentro do nosso programa que executa paralelamente com o software principal e outros fluxos. Possui um bloco de instruções ou comandos que serão executados.

Page 41: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsDetalhes:• Isso é a base de Programação Concorrente.• Conhecido como multiprogramação.• Boa parte das aplicações desenvolvidas nos dias atuais, utiliza de threads

para processamento de informações e melhoria de performance.• Tarefas podem ser paralelizadas em vários fluxos.• Tarefas podem ser distribuídas quando utilizamos threads.• Hoje grandes aplicações trabalham com threads, muitas delas distribuídas

em computadores diferentes.• São compostas por instruções de comandos de uma linguagem. No nosso

caso o Java.• Aproveitamos melhor os recursos de um sistema operacional.

THREADS

Page 42: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsDetalhes:

THREADS

• São conhecidas como processos leves.• Como foi dito, fazem parte do programa principal ou processo tradicional.• Possuem prioridades.• Podem possuir um identificador.• Podemos iniciar, parar ou colocar uma thread em espera.• São gerenciadas pelo sistema operacional.

Page 43: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsCiclo de Vida:

THREADS

Fonte: http://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html

Page 44: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsCriando uma Thread:

THREADS

public class ExemploThread extends Thread {

@Overridepublic void run() {}

 }

• Para criar uma Thread utilizamos a classe Thread.• As instruções de execução de uma Thread são desenvolvidas dentro do

método run().

Método que será executado pela ThreadClasse Thread

Page 45: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Exemplo 01package edu.anhanguera.prc.aula03; public class ExemploThread extends Thread {

@Overridepublic void run() {

System.out.println("Executando ExemploThread");}

 public static void main(String[] args) {

ExemploThread exemploThread = new ExemploThread();

exemploThread.start();}

}

Page 46: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsDetalhes:• Neste modelo, utilizamos uma classe como herança.• Caso seja necessário utilizar outra classe como herança, podemos ter

problemas, pois o Java não possui herança múltipla.• Para iniciar uma Thread utilizamos o método start().

THREADS

Page 47: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsCriando uma Thread:

THREADS

• Podemos utilizar uma outra forma de criar uma Thread: utilizando a interface Runnable.

public class ExemploRunnable implements Runnable { public void run() {}

}

Método que será executado pela Thread

Interface Runnable

Page 48: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Exemplo 02package edu.anhanguera.prc.aula03; public class ExemploRunnable implements Runnable { public void run() {

System.out.println("Executando ExemploRunnable");}

public static void main(String[] args) {ExemploRunnable exemploRunnable = new

ExemploRunnable();

Thread thread = new Thread(exemploRunnable);thread.start();

} }

Page 49: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

ThreadsDetalhes:• Neste modelo utilizamos uma interface.• Caso seja necessário utilizar outra classe como herança ou até mesmo uma

interface não teremos problemas.• Esta é a melhor forma de criar e utilizar Threads.• Precisamos instanciar a classe Thread e passar como argumento a classe

com a interface Runnable implementada.• Para iniciar uma Thread utilizamos o método start() da classe Thread.

THREADS

Page 50: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Exemplo 03

package edu.anhanguera.prc.aula03; import java.util.concurrent.ThreadLocalRandom; public class ExemploNumIntRandomico implements Runnable { 

public static int parar = 0;

public void run() { while (parar == 0) {

int num = ThreadLocalRandom.current().nextInt(0, 9);System.out.println("Numero: " + num);try {

Thread.sleep(500);} catch (InterruptedException e) {}

}}

 public static void main(String[] args) { ExemploNumIntRandomico numIntRandomico = new ExemploNumIntRandomico();

Thread thread = new Thread(numIntRandomico); thread.start();}

}

Page 51: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Threads

• O comando Thread.sleep é estático.• Sua principal função é deixar a Thread pausada ou adormecida durante um

período de tempo.• O parâmetro do método é a quantidade de milissegundos que a Thread

deve ficar adormecida.

THREADS

Detalhes:

Page 52: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Exemplo 04

package edu.anhanguera.prc.aula03; import java.util.concurrent.ThreadLocalRandom; public class ExemploNumDoubleRandomico implements Runnable {

public static int parar = 0; 

public void run() {while (parar == 0) {

double num = ThreadLocalRandom.current().nextDouble(0, 9); System.out.println("Numero: " + num);

try { Thread.sleep(2000);

} catch (InterruptedException e) {}}

}

public static void main(String[] args) {ExemploNumDoubleRandomico randomico = new ExemploNumDoubleRandomico();

Thread thread = new Thread(randomico); thread.start();}

 }

Page 53: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula03; public class ExemploNumerosRandomicos {

public static void main(String[] args) {ExemploNumDoubleRandomico doubleRandomico = new

ExemploNumDoubleRandomico();ExemploNumIntRandomico intRandomico = new ExemploNumIntRandomico();

Thread threadDouble = new Thread(doubleRandomico);threadDouble.start();

Thread threadInt = new Thread(intRandomico);threadInt.start();

try {Thread.sleep(10000);

ExemploNumDoubleRandomico.parar = 1;System.out.println("ExemploNumDoubleRandomico finalizado");

Thread.sleep(10000);ExemploNumIntRandomico.parar = 1;System.out.println("ExemploNumIntRandomico finalizado");

} catch (InterruptedException e) {}}

 }

Page 54: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Resumo

• Threads são blocos de instruções que executam em paralelo ao programa principal.

• Ajudam na performance de um aplicação.• As Threads possuem um ciclo de vida.• Podemos utilizar a classe Thread ou a interface Runnable para implementar

uma Thread.

THREADS

Page 55: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SINCRONIZAÇÃO

SINCRONIZAÇÃO

Page 56: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SincronizaçãoDetalhes:• Em alguns programas, as threads utilizam informações compartilhadas.• As informações compartilhadas, normalmente são variáveis que possuem

algum valor.• Pode ser também algum trecho de código que modifica alguma informação

em varias variáveis ou em um local de armazenamento como um banco de dados.

• Por exemplo: • Em uma conta corrente temos o valor do saldo.• Normalmente quando ocorre o saque ou um depósito o valor final

deve permanecer correto.• Algumas vezes o saque e o depósito ocorrem ao mesmo tempo.• Se esse processo acontecer em threads separadas, podemos ter o valor

final alterado incorretamente.

SINCRONIZAÇÃO

Page 57: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SincronizaçãoDetalhes:• Para trabalhar com dados compartilhados e manter a sua integridade,

utilizamos um conceito conhecido como sincronização.• Duas threads utilizam da mesma informação mas cada uma espera a

execução de outra thread ser concluída.

SINCRONIZAÇÃO

Vamos ver um exemplo sem sincronização das informações.

Page 58: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula04; public class Sincronizacao01 extends Thread {

public static int contador = 0;

public void run() {for (int i=1;i<=10;i++)

incrementarContador();}

public void incrementarContador() {contador++;System.out.println(this.getName() + " - " + contador);try {

Thread.sleep(1000);} catch (InterruptedException e) {}

}

public static void main(String[] args) throws InterruptedException {Sincronizacao01 sinc1 = new Sincronizacao01();

Thread thread1 = new Thread(sinc1);thread1.start();

Thread thread2 = new Thread(sinc1);thread2.start();

} }

Page 59: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SINCRONIZAÇÃO

Resultado final incorreto. Deveria efetuar a contagem corretamente.

Page 60: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula04; public class Sincronizacao02 extends Thread {

public static int contador = 0;

public void run() {synchronized (this) {for (int i=1;i<=10;i++)incrementarContador();

}}

public void incrementarContador() {contador++;System.out.println(this.getName() + " - " + contador);try {

Thread.sleep(1000);} catch (InterruptedException e) {}

}

public static void main(String[] args) throws InterruptedException {Sincronizacao02 sinc1 = new Sincronizacao02();

Thread thread1 = new Thread(sinc1);thread1.start();

Thread thread2 = new Thread(sinc1);thread2.start();

} }

Page 61: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SINCRONIZAÇÃO

Contagem efetuada com sucesso. Valor final correto !!!

Page 62: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SincronizaçãoDetalhes:

SINCRONIZAÇÃO

• Foi utilizada a palavra reservada synchronized em um bloco de código.• Esta palavra efetua a sincronização de um método ou bloco de código.

Page 63: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SincronizaçãoOutro exemplo:

SINCRONIZAÇÃO

• Vamos ver um exemplo utilizando a lógica de uma conta corrente de um banco.

• Vamos demonstrar um programa efetuando vários depósitos em uma conta corrente.

Page 64: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula04; public class ContaCorrente {

public double saldo;

public ContaCorrente() {}

public void sacar(double valor) {if ((saldo-valor) <= 0) {

System.out.println("Saldo indisponivel: " + saldo);}saldo -= valor;

}

public void depositar(double valor) {saldo += valor;

} }

Page 65: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula04; public class BancoNaoSincronizado implements Runnable {

public ContaCorrente contaCorrente;

public void run() {for (int i=10;i<=100;i+=10) {contaCorrente.depositar(i);System.out.println("Saldo Atual:" + contaCorrente.saldo);try {

Thread.sleep(500);} catch (InterruptedException e) {

e.printStackTrace();}

}}

public static void main(String[] args) {ContaCorrente contaCorrente = new ContaCorrente();BancoNaoSincronizado banco = new BancoNaoSincronizado();banco.contaCorrente = contaCorrente;

Thread thread1 = new Thread(banco);thread1.start();

Thread thread2 = new Thread(banco);thread2.start();

 Thread thread3 = new Thread(banco);thread3.start();

}  } 

Page 66: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SINCRONIZAÇÃO

Valor incorreto na conta corrente.

Page 67: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula04; public class BancoSincronizado implements Runnable {

public ContaCorrente contaCorrente;

public void run() {synchronized (contaCorrente) {for (int i=10;i<=100;i+=10) {contaCorrente.depositar(i);System.out.println("Saldo Atual:" + contaCorrente.saldo);try {

Thread.sleep(500);} catch (InterruptedException e) {

e.printStackTrace();}

}}}

public static void main(String[] args) {ContaCorrente contaCorrente = new ContaCorrente();

BancoSincronizado banco = new BancoSincronizado();banco.contaCorrente = contaCorrente;

Thread thread1 = new Thread(banco);thread1.start();

Thread thread2 = new Thread(banco);thread2.start();

 Thread thread3 = new Thread(banco);thread3.start();

} }

Page 68: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

SINCRONIZAÇÃO

Saldo correto !!

Page 69: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Resumo

• Uma thread pode utilizar informações compartilhadas.• Caso essas informações sejam sensíveis, alguns valores serão computados

incorretamente.• Para resolver este problema utilizamos a sincronização.• Utilizamos a palavra reservada synchronized para resolver o problema de

sincronização.

SINCRONIZAÇÃO

Page 70: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

COMUNICAÇÃO ENTRE PROCESSOS

Page 71: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

Comunicação Entre ProcessosO que é?:É a troca de informações ou mensagens entre programas, localizados no mesmo computador ou em computadores diferentes. Essa comunicação pode acontecer também em redes diferentes.

Page 72: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

Comunicação Entre ProcessosTipos de comunicação que vamos estudar:• Arquivos compartilhados utilizando Serialização de objetos em Java.• Comunicação Socket via TCP/IP.

Page 73: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

Arquivos CompartilhadosDetalhes:• Um arquivo fica localizado em um diretório.• Programas podem acessar este arquivo para compartilhar informações.• Vamos utilizar o conceito de serialização de classes em Java.• Neste processo, o arquivo contém os bytecodes de uma classe.• Para que ocorra a serialização, uma classe deve implementar a interface

Serializable.• A classe que implementa a interface Serializable é um POJO que possui

somente atributos com getter e setters.• Não vamos nos preocupar com acessos simultâneos no arquivo.

Page 74: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; import java.io.Serializable; public class Pessoa implements Serializable {

private static final long serialVersionUID = -8617059067424820303L;

private String nome;private int idade;private double altura;private double peso;

public Pessoa() {}

 public String getNome() {

return nome;}

 public void setNome(String nome) {

this.nome = nome;}

 public int getIdade() {

return idade;}

 public void setIdade(int idade) {

this.idade = idade;}

 

public double getAltura() {return altura;

public void setAltura(double altura) {

this.altura = altura;}

 public double getPeso() {

return peso;}

 public void setPeso(double peso) {

this.peso = peso;}

 }

Page 75: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; import java.io.FileOutputStream;import java.io.ObjectOutputStream; public class SerializandoObjeto {

public static void main(String[] args) {Pessoa pessoa = new Pessoa();FileOutputStream fileOutputStream = null;ObjectOutputStream objectOutputStream = null;

try {pessoa.setAltura(1.75);pessoa.setIdade(31);pessoa.setNome("Bruce Wayne");pessoa.setPeso(85.45);

fileOutputStream = new FileOutputStream("/tmp/pessoa.obj");objectOutputStream = new ObjectOutputStream(fileOutputStream);objectOutputStream.writeObject(pessoa);

} catch (Exception e) {e.printStackTrace();

} finally {try {

fileOutputStream.close();objectOutputStream.close();

} catch (Exception e) {}}

}}

Page 76: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; import java.io.FileInputStream;import java.io.ObjectInputStream; public class DeserializandoObjeto {

public static void main(String[] args) {Pessoa pessoa = null;FileInputStream fileInputStream = null;ObjectInputStream objectInputStream = null;

try {fileInputStream = new FileInputStream("/tmp/pessoa.obj");objectInputStream = new ObjectInputStream(fileInputStream);

pessoa = (Pessoa) objectInputStream.readObject();

System.out.println(pessoa.getAltura());System.out.println(pessoa.getIdade());System.out.println(pessoa.getNome());System.out.println(pessoa.getPeso());

} catch (Exception e) {e.printStackTrace();

} finally {try {

fileInputStream.close();objectInputStream.close();

} catch (Exception e) {}}

}}

Page 77: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

Arquivos CompartilhadosDetalhes:• Utilizamos a classe FileOutputStream para criar um arquivo em um

diretório.• A classe ObjectOutputStream grava o objeto Pessoa no arquivo

especificado.• Este processo acontece a Serialização do objeto.• Para Deserializar o objeto, utilizamos o FileInputStream para efetuar a

leitura do arquivo e ObjectInputStream para criar o objeto Pessoa.• É necessário efetuar um cast para o tipo especificado.

Page 78: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

SocketsDetalhes:• Comunicação entre processos localizados normalmente em computadores

diferentes.• Utilizamos a rede para o envio de informações entre um processo e outro.• Esta comunicação acontece via TCP/IP.• É necessário conhecer o endereço e a porta do processo destino para que

ocorra a comunicação.• Existe uma padronização feita pelo cliente e servidor para que ocorra a

troca de informações.

Page 79: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; import java.io.IOException;import java.net.ServerSocket;import java.net.Socket; public class Servidor {

public static void main(String[] args) {ServerSocket servidor = null;try {

System.out.println("[SERVER] - Iniciando Servidor na porta 1234...");

servidor = new ServerSocket(1234);System.out.println("[SERVER] - Servidor Iniciado");

while (true) {System.out.println("[SERVER] - Aguardando conexão.");Socket cliente = servidor.accept();System.out.println("[SERVER] - Conexão Recebida de " +

cliente.getInetAddress().getHostAddress());ProcessamentoThread processThread = new

ProcessamentoThread();processThread.setSocket(cliente);Thread thread = new Thread(processThread);thread.start();System.out.println("[SERVER] - Thread de processamento em

execução.");}

} catch (IOException e) {e.printStackTrace();

} finally {try {

servidor.close();} catch (IOException e) {}

}}

}

Page 80: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

SocketsDetalhes:• Neste exemplo, estamos criando uma comunicação cliente-servidor.• Utilizamos a classe ServerSocket para criar um servidor que irá receber

conexões de seus clientes.• Este servidor é executado na porta 1234.• Para cada conexão, criamos uma Thread para paralelizar o processamento

das informações.

Page 81: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; import java.io.IOException;import java.net.Socket;import java.util.Scanner; public class ProcessamentoThread implements Runnable { 

private Socket cliente = null; 

public void run() {System.out.println("[PROCESSO] - Executando processamento do cliente " +

cliente.getInetAddress().getHostAddress());Scanner scanner = null;try {

scanner = new Scanner(cliente.getInputStream());while (scanner.hasNextLine()) {

System.out.println("[PROCESSO] - Mensagem Recebida: " +

scanner.nextLine());}

} catch (IOException e) {e.printStackTrace();

} finally {scanner.close();

}}

 public Socket getSocket() {

return cliente;}

 public void setSocket(Socket socket) {

this.cliente = socket;}

}

Page 82: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; import java.io.IOException;import java.io.PrintStream;import java.net.Socket; import javax.swing.JOptionPane; public class Cliente { 

public static void main(String[] args) {Socket servidor = null;try {

String mensagem = (String) JOptionPane.showInputDialog(null, "Escreva uma mensagem:",

"Mensagem do Cliente", JOptionPane.PLAIN_MESSAGE, null, null,

"escreva aqui");System.out.println("[CLIENT] - Conectando no servidor");servidor = new Socket("localhost", 1234);System.out.println("[CLIENT] - Conexão com sucesso !!!");

PrintStream printStream = new PrintStream(servidor.getOutputStream());

printStream.println(mensagem);

System.out.println("[CLIENT] - Mensagem enviada: " + mensagem);} catch (Exception e) {

e.printStackTrace();} finally {

try {servidor.close();

} catch (IOException e) {}}

}}

Page 83: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

SocketsDetalhes:• O cliente informa o endereço e a porta do servidor para efetuar a conexão.• Nosso cliente envia uma informação através de uma caixa de dialogo.• O servidor imprime a informação enviada pelo cliente.

Page 84: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

COMUNICAÇÃO ENTRE PROCESSOS

SinaisDetalhes:• São eventos disparados dentro de um sistema operacional para indicar

alguma ação dentro de um processo.• Efetua a comunicação desses eventos para um processo.• Os sinais são eventos assíncronos.• Um exemplo de sinal é quando uma aplicação é finalizada.

Page 85: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula05; public class ShutdownHook {

public static void main(String[] args) {Runtime.getRuntime().addShutdownHook(new

Thread() {@Overridepublic void run() {

System.out.println("Terminando o programa");

}});

try {Thread.sleep(5000);

} catch (InterruptedException e) {e.printStackTrace();

}}

}

Page 86: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

Resumo• Comunicação entre processos é troca de informações entre programas.• Essa comunicação pode ser:

• Arquivo compartilhado.• Socket.

• Serialização é o processo de gravar as informações de uma classe em Java em um arquivo.

• Deserialização é o processo de recuperar informações de um arquivo e carrega-los em uma classe Java.

COMUNICAÇÃO ENTRE PROCESSOS

Page 87: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

DEADLOCK

DEADLOCK

Page 88: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

DEADLOCK

O que acontece nessa imagem?

Page 89: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

DEADLOCK

DeadlockO que é?:É quando uma Thread espera a execução de uma outra Thread e vice-versa. Nesta situação, existe um processo de sincronia entre dois objetos compartilhados.

Page 90: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula06; public class DeadLock {

public static void main(String[] args) {String carro1 = new String("Objeto 1");String carro2 = new String("Objeto 2");String carro3 = new String("Objeto 3");

Thread thread1 = new Thread(new Rodovia(carro1, carro2), "THREAD 1");

thread1.start();

Thread thread2 = new Thread(new Rodovia(carro2, carro3), "THREAD 2");

thread2.start(); 

Thread thread3 = new Thread(new Rodovia(carro3, carro1), "THREAD 3");

thread3.start(); }

}

Page 91: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula06; public class Rodovia implements Runnable { 

private String carro1;private String carro2;

 public Rodovia(String objeto1, String objeto2) {

this.carro1 = objeto1;this.carro2 = objeto2;

public void run() {System.out.println(Thread.currentThread().getName() + " - 1 - Lock no " +

carro1);synchronized (carro1) {

System.out.println(Thread.currentThread().getName() + " - 2 - Lock no " + carro2); 

synchronized (carro2) {System.out.println("Lock");try {

Thread.sleep(1000);} catch (InterruptedException e) {

e.printStackTrace();}

}}System.out.println("Saindo do Lock");

}}

Page 92: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

MEMÓRIA COMPARTILHADA

MEMÓRIA COMPARTILHADA

Page 93: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

MEMÓRIA COMPARTILHADA

Memória CompartilhadaO que é?:É o processo de compartilhar informações contidas na memória diretamente em arquivos. Neste processo o Java utiliza diretamente a memória física tornando o processo de leitura e escrita o mais rápido possível.

Page 94: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula07; import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel; public class ArquivoMemoriaEscrever { 

@SuppressWarnings("resource")public static void main(String[] args) {

long bufferSize = 8 * 10000;try {

File arquivo = new File("/tmp/arquivo_memoria.txt");arquivo.delete();FileChannel fileChannel = new RandomAccessFile(arquivo,

"rw").getChannel();MappedByteBuffer mp =

fileChannel.map(FileChannel.MapMode.READ_WRITE, 0, bufferSize);String valor = "GRAVANDO UMA INFORMACAO";for (int j=0;j<=10;j++) {

mp.put(valor.getBytes());}fileChannel.close();mp.clear();

} catch (FileNotFoundException e) {e.printStackTrace();

} catch (IOException e) {e.printStackTrace();

} }

}

Page 95: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

package edu.anhanguera.prc.aula07; import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;import java.nio.channels.FileChannel; public class ArquivoMemoriaLer { 

@SuppressWarnings("resource")public static void main(String[] args) throws FileNotFoundException, IOException,

InterruptedException {

long bufferSize = 8 * 10000;File arquivo = new File("/tmp/arquivo_memoria.txt");FileChannel fileChannel = new RandomAccessFile(arquivo, "r").getChannel();MappedByteBuffer mp = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0,

bufferSize);mp.load();byte[] bytes = new byte[23];for (int i=0;i<=mp.limit()-1;i++) {

mp.get(bytes);String valor = new String(bytes);if (!valor.trim().isEmpty()) { System.out.println(new String(bytes));} else {

break;}

} }

}

Page 96: Programação Concorrente - Curso Completo

ANHANGUERA – 2016.1

PROGRAMAÇÃO CONCORRENTELAB 01 – INSTALAÇÃO DO AMBIENTE JAVA

Prof. Thomás da [email protected]

Page 97: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

INSTALAÇÃO DO AMBIENTE JAVA

Page 98: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Iremos efetuar a instalação do ambiente de desenvolvimento para a linguagem de programação Java em um sistema operacional Windows.

Instalando o ambienteO que vamos fazer:

Page 99: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

• Instalador do Java JDK 1.7.0http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html

• Eclipse Lunahttps://www.eclipse.org/downloads/

E do Windows 8.1 !!!

As instruções também são validas para outras versões do Windows, somente os passos são diferentes.

Instalando o ambienteO que vamos precisar:

Page 100: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Antes de iniciar, vamos verificar se o ambiente utilizado é de 32-bits ou de 64-bits para efetuar a instalação correta do Java.

Verificando o ambienteO que vamos fazer:

Botão direito no ícone Windows.

Selecionar a opção Sistema.

Page 101: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Verificando o ambiente

Nosso ambiente é de 64-bits.

Vamos efetuar o download da versão do Java de 64-bits.

Page 102: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Download do Java

Clicar neste botão.

Acessar o endereço:http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html

Page 103: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Download do Java Clicar aqui e aceite os termos.

Escolher versão para Windows: x86 = 32bitsx64 = 64bits

No nosso exemplo vamos baixar a versão Windows x64.

Page 104: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Instalando o Java Execute o instalador, onde foi baixado.

Responda Sim para iniciar a instalação.

Page 105: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Instalando o Java (JDK)

Clicar em Next.

Selecione um diretório para instalação do JDK, pode ser o mesmo sugerido pelo setup.

Clicar em Next.

Page 106: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Instalando o Java (JRE)

Instalando o JDK, depois será iniciado a instalação do JRE.

Selecione um diretório para instalação do JRE, pode ser o mesmo sugerido pelo setup.

Clicar em Next.

Page 107: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Concluindo a instalação

Instalando o JRE.

Clicar em Close e a instalação foi concluída.

Page 108: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Vamos configurar a variável de ambiente chamada JAVA_HOME, para executar o Java em linha de comando e iremos incluir os executáveis do JDK no PATH do Windows.

Configurando o ambienteO que vamos fazer:

Page 109: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Para quem não conhece a definição de variável de ambiente e PATH do sistema operacional, acessar os links a seguir:

Configurando o ambienteDica:

Variáveis de Ambiente e PATH

https://technet.microsoft.com/pt-br/library/cc668471.aspxhttp://pt.wikipedia.org/wiki/Vari%C3%A1vel_de_ambientehttp://en.wikipedia.org/wiki/PATH_%28variable%29

Page 110: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Configurando o ambiente

Botão direito no ícone Windows.

Selecionar a opção Sistema.

Page 111: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Configurando o ambiente

Selecionar “Configurações avançadas do sistema”

Page 112: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Configurando o ambienteSelecionar “Variáveis de Ambiente”

Clicar em “Novo”

Page 113: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Configurando o ambiente

Incluir a variável “JAVA_HOME”. No “Valor da variável”, colocar o diretório de instalação do JDK

Alterar a variável “PATH” e incluir o diretório de instalação do JDK

mais a pasta “bin”

Page 114: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Testando a instalação

Executar o comando “Windows + R”

Digite o comando “cmd”

Digite o comando “java -version”

Page 115: Programação Concorrente - Curso Completo

PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa

INSTALAÇÃO DO AMBIENTE JAVA

Seguindo este roteiro passo-a-passo, teremos o Java instalado corretamente no sistema, para iniciar o desenvolvimento de nossas aplicações.

Instalação concluídaTerminamos !!!

Page 116: Programação Concorrente - Curso Completo

Obrigado !!!

ANHANGUERA – 2016.1