SlideShare uma empresa Scribd logo
ANHANGUERA – 2016.1
PROGRAMAÇÃO CONCORRENTE
CURSO COMPLETO
Prof. Thomás da Costa
thomascosta@aedu.com
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
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
thomascosta@aedu.com
https://github.com/thomasdacosta
Prof. Thomás da Costa
https://professorthomasdacosta.wordpress.com
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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
APRESENTAÇÃO
Média
70% Prova Obrigatória
30% Trabalho
70% Prova Obrigatória
30% Trabalho
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.
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.
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
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:
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?
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
APRESENTAÇÃO
• Conceitos básicos.
• Processos concorrentes.
• Sincronização.
• Semáforos.
O que vamos aprender
Onde tudo começa:
Vamos ver o PEA. !!!
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
APRESENTAÇÃO
PEA
Conceitos 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.
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: thomascosta@aedu.com
Material da Aula
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
APRESENTAÇÃO
Bibliografias Utilizadas
TANENBAUM, Andrew S; STEEN, Maarten Van. Sistemas
distribuídos: princípios e paradigmas. 2ª ed. São Paulo: Pearson -
Prentice Hall, 2010.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
APRESENTAÇÃO
Vamos iniciar nosso curso !!!
Na próxima aula !!!
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
A TECNOLOGIA JAVA
SISTEMAS OPERACIONAIS
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 Operacional
O que é?:
SISTEMAS OPERACIONAIS
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 Operacionais
Objetivos:
SISTEMAS OPERACIONAIS
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 Operacionais
Dias atuais:
SISTEMAS OPERACIONAIS
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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
SISTEMAS OPERACIONAIS
Sistemas Operacionais
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
A TECNOLOGIA JAVA
A TECNOLOGIA JAVA
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órico
Origens:
A TECNOLOGIA JAVA
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
A TECNOLOGIA JAVA
Fonte: http://viralpatel.net/blogs/java-virtual-machine-an-inside-story/
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.
JVM
Java Virtual Machine:
A TECNOLOGIA JAVA
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
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 !!!
Java
O que vamos ver na revisão:
A TECNOLOGIA JAVA
Vamos começar !!!
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?");
}
}
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 varargs
System.out.format("%s formatada %s vários %s",
new String("Saida"),
new String("com"),
new String("paramêtros"));
}
}
Exemplo 02
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
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
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
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
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
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
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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
THREADS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
THREADS
Threads
Detalhes:
• 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.
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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
O 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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
• 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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Ciclo de Vida:
THREADS
Fonte: http://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Criando uma Thread:
THREADS
public class ExemploThread extends Thread {
@Override
public 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 Thread
Classe Thread
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 01
package edu.anhanguera.prc.aula03;
public class ExemploThread extends Thread {
@Override
public void run() {
System.out.println("Executando ExemploThread");
}
public static void main(String[] args) {
ExemploThread exemploThread = new ExemploThread();
exemploThread.start();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
• 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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Criando 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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Exemplo 02
package 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();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Threads
Detalhes:
• 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
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();
}
}
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:
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();
}
}
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) {}
}
}
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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
SINCRONIZAÇÃO
SINCRONIZAÇÃO
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Sincronização
Detalhes:
• 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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Sincronização
Detalhes:
• 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.
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();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
SINCRONIZAÇÃO
Resultado final incorreto. Deveria
efetuar a contagem corretamente.
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();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
SINCRONIZAÇÃO
Contagem efetuada com sucesso.
Valor final correto !!!
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Sincronização
Detalhes:
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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
Sincronização
Outro 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.
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;
}
}
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();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
SINCRONIZAÇÃO
Valor incorreto na conta corrente.
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();
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
SINCRONIZAÇÃO
Saldo correto !!
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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
COMUNICAÇÃO ENTRE PROCESSOS
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Comunicação Entre Processos
O 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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Comunicação Entre Processos
Tipos de comunicação que vamos estudar:
• Arquivos compartilhados utilizando Serialização de objetos em Java.
• Comunicação Socket via TCP/IP.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Arquivos Compartilhados
Detalhes:
• 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.
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;
}
}
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) {}
}
}
}
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) {}
}
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Arquivos Compartilhados
Detalhes:
• 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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Sockets
Detalhes:
• 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.
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) {}
}
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Sockets
Detalhes:
• 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.
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;
}
}
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) {}
}
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Sockets
Detalhes:
• 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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
COMUNICAÇÃO ENTRE PROCESSOS
Sinais
Detalhes:
• 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.
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() {
@Override
public void run() {
System.out.println("Terminando o programa");
}
});
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
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
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
DEADLOCK
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
O que acontece nessa imagem?
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
DEADLOCK
Deadlock
O 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.
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();
}
}
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");
}
}
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
MEMÓRIA COMPARTILHADA
MEMÓRIA COMPARTILHADA
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
MEMÓRIA COMPARTILHADA
Memória Compartilhada
O 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.
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();
}
}
}
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;
}
}
}
}
ANHANGUERA – 2016.1
PROGRAMAÇÃO CONCORRENTE
LAB 01 – INSTALAÇÃO DO AMBIENTE JAVA
Prof. Thomás da Costa
thomascosta@aedu.com
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
INSTALAÇÃO DO AMBIENTE JAVA
INSTALAÇÃO DO AMBIENTE JAVA
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 ambiente
O que vamos fazer:
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
INSTALAÇÃO DO AMBIENTE JAVA
• Instalador do Java JDK 1.7.0
http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html
• Eclipse Luna
https://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 ambiente
O que vamos precisar:
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 ambiente
O que vamos fazer:
Botão direito no ícone Windows.
Selecionar a opção Sistema.
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.
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
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 = 32bits
x64 = 64bits
No nosso exemplo vamos baixar a versão Windows x64.
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.
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.
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.
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.
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 ambiente
O que vamos fazer:
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 ambiente
Dica:
Variáveis de Ambiente e PATH
https://technet.microsoft.com/pt-br/library/cc668471.aspx
http://pt.wikipedia.org/wiki/Vari%C3%A1vel_de_ambiente
http://en.wikipedia.org/wiki/PATH_%28variable%29
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.
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
INSTALAÇÃO DO AMBIENTE JAVA
Configurando o ambiente
Selecionar “Configurações
avançadas do sistema”
PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa
INSTALAÇÃO DO AMBIENTE JAVA
Configurando o ambiente
Selecionar “Variáveis de Ambiente”
Clicar em “Novo”
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”
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”
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ída
Terminamos !!!
Obrigado !!!
ANHANGUERA – 2016.1

Mais conteúdo relacionado

Mais procurados

Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04
thomasdacosta
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03
thomasdacosta
 
Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02
thomasdacosta
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
thomasdacosta
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02
thomasdacosta
 
Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02
thomasdacosta
 
Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01
thomasdacosta
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completo
thomasdacosta
 
A Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comumA Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comum
Luiz Henrique Rauber Rodrigues
 
A Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comumA Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comum
Luiz Henrique Rauber Rodrigues
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Sidney Roberto
 
Programação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso CompletoProgramação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso Completo
thomasdacosta
 
Algoritmos e Técnicas de Programação - Aula 03
Algoritmos e Técnicas de Programação - Aula 03Algoritmos e Técnicas de Programação - Aula 03
Algoritmos e Técnicas de Programação - Aula 03
thomasdacosta
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
Leide Sayuri Ogasawara
 
Metodologia e Linguagem de Programação Avançada - Aula 1
Metodologia e Linguagem de Programação Avançada - Aula 1Metodologia e Linguagem de Programação Avançada - Aula 1
Metodologia e Linguagem de Programação Avançada - Aula 1
Thyago Maia
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de ProgramasSidney Roberto
 
Metodologia e Linguagem de Programação - Aula 1
Metodologia e Linguagem de Programação - Aula 1Metodologia e Linguagem de Programação - Aula 1
Metodologia e Linguagem de Programação - Aula 1
Thyago Maia
 
Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1
Thyago Maia
 
Desbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus LimaDesbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus Lima
Matheus Dos Santos Lima
 

Mais procurados (20)

Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04Lógica e Matemática Computacional - Aula 04
Lógica e Matemática Computacional - Aula 04
 
Programação Concorrente - Aula 03
Programação Concorrente - Aula 03Programação Concorrente - Aula 03
Programação Concorrente - Aula 03
 
Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02Algoritmos e Estrutura de Dados - Aula 02
Algoritmos e Estrutura de Dados - Aula 02
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02
 
Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02Algoritmos e Técnicas de Programação - Aula 02
Algoritmos e Técnicas de Programação - Aula 02
 
Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01Algoritmos e Técnicas de Programação - Aula 01
Algoritmos e Técnicas de Programação - Aula 01
 
Algoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso CompletoAlgoritmos e Técnicas de Programação - Curso Completo
Algoritmos e Técnicas de Programação - Curso Completo
 
A Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comumA Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comum
 
A Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comumA Experiência (e a falta dela) em Linux como usuário comum
A Experiência (e a falta dela) em Linux como usuário comum
 
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
Vamos aprender algo diferente? Introdução à linguagem Python (aula 1)
 
Programação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso CompletoProgramação Estruturada 2 - Curso Completo
Programação Estruturada 2 - Curso Completo
 
Algoritmos e Técnicas de Programação - Aula 03
Algoritmos e Técnicas de Programação - Aula 03Algoritmos e Técnicas de Programação - Aula 03
Algoritmos e Técnicas de Programação - Aula 03
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Metodologia e Linguagem de Programação Avançada - Aula 1
Metodologia e Linguagem de Programação Avançada - Aula 1Metodologia e Linguagem de Programação Avançada - Aula 1
Metodologia e Linguagem de Programação Avançada - Aula 1
 
Estrutura de Programas
Estrutura de ProgramasEstrutura de Programas
Estrutura de Programas
 
Metodologia e Linguagem de Programação - Aula 1
Metodologia e Linguagem de Programação - Aula 1Metodologia e Linguagem de Programação - Aula 1
Metodologia e Linguagem de Programação - Aula 1
 
Laços de Repetição
Laços de RepetiçãoLaços de Repetição
Laços de Repetição
 
Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1Programação Dinâmica para Web - Aula 1
Programação Dinâmica para Web - Aula 1
 
Desbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus LimaDesbravando a web com python - Matheus Lima
Desbravando a web com python - Matheus Lima
 

Destaque

Programação Concorrente - Aula 04
Programação Concorrente - Aula 04Programação Concorrente - Aula 04
Programação Concorrente - Aula 04
thomasdacosta
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
thomasdacosta
 
Programação Concorrente - Aula 06
Programação Concorrente - Aula 06Programação Concorrente - Aula 06
Programação Concorrente - Aula 06
thomasdacosta
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02
thomasdacosta
 
Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03
thomasdacosta
 
Organização de Computadores - Aula 02
Organização de Computadores - Aula 02Organização de Computadores - Aula 02
Organização de Computadores - Aula 02
thomasdacosta
 
Programação Estruturada 2 - Aula 05 - Código Fonte
Programação Estruturada 2 - Aula 05 - Código FonteProgramação Estruturada 2 - Aula 05 - Código Fonte
Programação Estruturada 2 - Aula 05 - Código Fonte
thomasdacosta
 
Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03
thomasdacosta
 
Redes de Computadores - Aula 05
Redes de Computadores - Aula 05Redes de Computadores - Aula 05
Redes de Computadores - Aula 05
thomasdacosta
 
Mapa mental de un sistema distribuido
Mapa mental de un sistema distribuidoMapa mental de un sistema distribuido
Mapa mental de un sistema distribuido
Tensor
 
Sistemas distribuídos aula 1
Sistemas distribuídos aula 1Sistemas distribuídos aula 1
Sistemas distribuídos aula 1
Renato William
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
Fabio Moura Pereira
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
Tensor
 
Sistemas distribuidos 2
Sistemas distribuidos 2Sistemas distribuidos 2
Sistemas distribuidos 2
Tensor
 
Sistemas Distribuídos - Modelos Arquitetônicos
Sistemas Distribuídos - Modelos ArquitetônicosSistemas Distribuídos - Modelos Arquitetônicos
Sistemas Distribuídos - Modelos Arquitetônicos
João Werther Filho IT
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
Fabio Moura Pereira
 
Lógica e Matemática Computacional - Exercícios 01
Lógica e Matemática Computacional - Exercícios 01Lógica e Matemática Computacional - Exercícios 01
Lógica e Matemática Computacional - Exercícios 01
thomasdacosta
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threadsSilvino Neto
 
Capítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais ModernosCapítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais Modernos
Wellington Oliveira
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.dannas_06
 

Destaque (20)

Programação Concorrente - Aula 04
Programação Concorrente - Aula 04Programação Concorrente - Aula 04
Programação Concorrente - Aula 04
 
Programação Concorrente - Aula 05
Programação Concorrente - Aula 05Programação Concorrente - Aula 05
Programação Concorrente - Aula 05
 
Programação Concorrente - Aula 06
Programação Concorrente - Aula 06Programação Concorrente - Aula 06
Programação Concorrente - Aula 06
 
Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02Programação de Sistemas Distribuídos - Aula 02
Programação de Sistemas Distribuídos - Aula 02
 
Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03Programação de Sistemas Distribuídos - Aula 03
Programação de Sistemas Distribuídos - Aula 03
 
Organização de Computadores - Aula 02
Organização de Computadores - Aula 02Organização de Computadores - Aula 02
Organização de Computadores - Aula 02
 
Programação Estruturada 2 - Aula 05 - Código Fonte
Programação Estruturada 2 - Aula 05 - Código FonteProgramação Estruturada 2 - Aula 05 - Código Fonte
Programação Estruturada 2 - Aula 05 - Código Fonte
 
Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03Redes de Computadores - Exercícios 03
Redes de Computadores - Exercícios 03
 
Redes de Computadores - Aula 05
Redes de Computadores - Aula 05Redes de Computadores - Aula 05
Redes de Computadores - Aula 05
 
Mapa mental de un sistema distribuido
Mapa mental de un sistema distribuidoMapa mental de un sistema distribuido
Mapa mental de un sistema distribuido
 
Sistemas distribuídos aula 1
Sistemas distribuídos aula 1Sistemas distribuídos aula 1
Sistemas distribuídos aula 1
 
Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
Sistemas distribuidos
Sistemas distribuidosSistemas distribuidos
Sistemas distribuidos
 
Sistemas distribuidos 2
Sistemas distribuidos 2Sistemas distribuidos 2
Sistemas distribuidos 2
 
Sistemas Distribuídos - Modelos Arquitetônicos
Sistemas Distribuídos - Modelos ArquitetônicosSistemas Distribuídos - Modelos Arquitetônicos
Sistemas Distribuídos - Modelos Arquitetônicos
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Lógica e Matemática Computacional - Exercícios 01
Lógica e Matemática Computacional - Exercícios 01Lógica e Matemática Computacional - Exercícios 01
Lógica e Matemática Computacional - Exercícios 01
 
Processos e threads
Processos e threadsProcessos e threads
Processos e threads
 
Capítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais ModernosCapítulo 5 Sistemas Operacionais Modernos
Capítulo 5 Sistemas Operacionais Modernos
 
Resumo de S.O.
Resumo de S.O.Resumo de S.O.
Resumo de S.O.
 

Semelhante a Programação Concorrente - Curso Completo

Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
thomasdacosta
 
01 ubuntudesktop-160204165000
01 ubuntudesktop-16020416500001 ubuntudesktop-160204165000
01 ubuntudesktop-160204165000
Ware Pc
 
Introdução ao GNU/Linux
Introdução ao GNU/LinuxIntrodução ao GNU/Linux
Introdução ao GNU/Linux
Robson Vaamonde
 
Python-Fenalivre-Imed
Python-Fenalivre-ImedPython-Fenalivre-Imed
Python-Fenalivre-Imed
Luciano Camargo Cruz
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
Carlos Eduardo
 
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO ILIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
Os Fantasmas !
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
Rafael Dohms
 
Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...
Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...
Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...
Thiago Barros, PSM
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
Fabio Janiszevski
 
Projeto TCOS - III ENSOL
Projeto TCOS - III ENSOLProjeto TCOS - III ENSOL
Projeto TCOS - III ENSOL
Aécio Pires
 
Introdução ao SAMBA-4 Level 2
Introdução ao SAMBA-4 Level 2Introdução ao SAMBA-4 Level 2
Introdução ao SAMBA-4 Level 2
Robson Vaamonde
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
profjotamarcosduarte
 
Empreendendo com Python
Empreendendo com PythonEmpreendendo com Python
Empreendendo com Python
Joao Luis Tavares
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Thiago Rondon
 
Apostila de algoritimo super básica
Apostila de algoritimo super básicaApostila de algoritimo super básica
Apostila de algoritimo super básica
Pablo Verlly Moreira
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Mario Guedes
 
Lições aprendidas sobre transações em microsserviços
Lições aprendidas sobre transações em microsserviçosLições aprendidas sobre transações em microsserviços
Lições aprendidas sobre transações em microsserviços
Fábio José Moraes
 

Semelhante a Programação Concorrente - Curso Completo (20)

Redes de Computadores - Aula 01
Redes de Computadores - Aula 01Redes de Computadores - Aula 01
Redes de Computadores - Aula 01
 
01 ubuntudesktop-160204165000
01 ubuntudesktop-16020416500001 ubuntudesktop-160204165000
01 ubuntudesktop-160204165000
 
Introdução ao GNU/Linux
Introdução ao GNU/LinuxIntrodução ao GNU/Linux
Introdução ao GNU/Linux
 
Python-Fenalivre-Imed
Python-Fenalivre-ImedPython-Fenalivre-Imed
Python-Fenalivre-Imed
 
Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1Programação Orientada a Objetos - Pós Graduação - aula 1
Programação Orientada a Objetos - Pós Graduação - aula 1
 
Aula 00 (1)
Aula 00 (1)Aula 00 (1)
Aula 00 (1)
 
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO ILIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
LIVRO PROPRIETÁRIO - PROGRAMAÇÃO I
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
 
Apresentacao artigo final
Apresentacao artigo finalApresentacao artigo final
Apresentacao artigo final
 
Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...
Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...
Apresentação do Projeto PRIME SCRUM. trabalho final do curso de Análise e Des...
 
Robotica
RoboticaRobotica
Robotica
 
O que move a web atualmente?
O que move a web atualmente?O que move a web atualmente?
O que move a web atualmente?
 
Projeto TCOS - III ENSOL
Projeto TCOS - III ENSOLProjeto TCOS - III ENSOL
Projeto TCOS - III ENSOL
 
Introdução ao SAMBA-4 Level 2
Introdução ao SAMBA-4 Level 2Introdução ao SAMBA-4 Level 2
Introdução ao SAMBA-4 Level 2
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Empreendendo com Python
Empreendendo com PythonEmpreendendo com Python
Empreendendo com Python
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
 
Apostila de algoritimo super básica
Apostila de algoritimo super básicaApostila de algoritimo super básica
Apostila de algoritimo super básica
 
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
Extreme Experience 2018 | Estudo de Caso: Aplicação DataSnap para 10.000 usuá...
 
Lições aprendidas sobre transações em microsserviços
Lições aprendidas sobre transações em microsserviçosLições aprendidas sobre transações em microsserviços
Lições aprendidas sobre transações em microsserviços
 

Mais de thomasdacosta

Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
thomasdacosta
 
Organização de Computadores - Aula 03
Organização de Computadores - Aula 03Organização de Computadores - Aula 03
Organização de Computadores - Aula 03
thomasdacosta
 
Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06
thomasdacosta
 
Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05
thomasdacosta
 
Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04
thomasdacosta
 
Redes de Computadores - Aula 04
Redes de Computadores - Aula 04Redes de Computadores - Aula 04
Redes de Computadores - Aula 04
thomasdacosta
 
Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05
thomasdacosta
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
thomasdacosta
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
thomasdacosta
 
Redes de Computadores - Aula 03
Redes de Computadores - Aula 03Redes de Computadores - Aula 03
Redes de Computadores - Aula 03
thomasdacosta
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02
thomasdacosta
 

Mais de thomasdacosta (11)

Azure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a ProduçãoAzure Functions e Java: Do Desenvolvimento a Produção
Azure Functions e Java: Do Desenvolvimento a Produção
 
Organização de Computadores - Aula 03
Organização de Computadores - Aula 03Organização de Computadores - Aula 03
Organização de Computadores - Aula 03
 
Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06Redes de Computadores - Exercícios 06
Redes de Computadores - Exercícios 06
 
Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05Redes de Computadores - Exercícios 05
Redes de Computadores - Exercícios 05
 
Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04Redes de Computadores - Exercícios 04
Redes de Computadores - Exercícios 04
 
Redes de Computadores - Aula 04
Redes de Computadores - Aula 04Redes de Computadores - Aula 04
Redes de Computadores - Aula 04
 
Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03Algoritmos e Estrutura de Dados - Aula 03
Algoritmos e Estrutura de Dados - Aula 03
 
Redes de Computadores - Aula 03
Redes de Computadores - Aula 03Redes de Computadores - Aula 03
Redes de Computadores - Aula 03
 
Redes de Computadores - Aula 02
Redes de Computadores - Aula 02Redes de Computadores - Aula 02
Redes de Computadores - Aula 02
 

Programação Concorrente - Curso Completo

  • 1. ANHANGUERA – 2016.1 PROGRAMAÇÃO CONCORRENTE CURSO COMPLETO Prof. Thomás da Costa thomascosta@aedu.com
  • 2. 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
  • 3. 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 thomascosta@aedu.com https://github.com/thomasdacosta Prof. Thomás da Costa https://professorthomasdacosta.wordpress.com
  • 4. 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.
  • 5. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa APRESENTAÇÃO Média 70% Prova Obrigatória 30% Trabalho 70% Prova Obrigatória 30% Trabalho
  • 6. 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.
  • 7. 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.
  • 8. 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
  • 9. 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:
  • 10. 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?
  • 11. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa APRESENTAÇÃO • Conceitos básicos. • Processos concorrentes. • Sincronização. • Semáforos. O que vamos aprender Onde tudo começa: Vamos ver o PEA. !!!
  • 12. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa APRESENTAÇÃO PEA Conceitos 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.
  • 13. 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: thomascosta@aedu.com Material da Aula
  • 14. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa APRESENTAÇÃO Bibliografias Utilizadas TANENBAUM, Andrew S; STEEN, Maarten Van. Sistemas distribuídos: princípios e paradigmas. 2ª ed. São Paulo: Pearson - Prentice Hall, 2010.
  • 15. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa APRESENTAÇÃO Vamos iniciar nosso curso !!! Na próxima aula !!!
  • 16. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa A TECNOLOGIA JAVA SISTEMAS OPERACIONAIS
  • 17. 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 Operacional O que é?: SISTEMAS OPERACIONAIS
  • 18. 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 Operacionais Objetivos: SISTEMAS OPERACIONAIS
  • 19. 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 Operacionais Dias atuais: SISTEMAS OPERACIONAIS
  • 20. 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
  • 21. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa SISTEMAS OPERACIONAIS Sistemas Operacionais
  • 22. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa A TECNOLOGIA JAVA A TECNOLOGIA JAVA
  • 23. 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órico Origens: A TECNOLOGIA JAVA
  • 24. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa A TECNOLOGIA JAVA Fonte: http://viralpatel.net/blogs/java-virtual-machine-an-inside-story/
  • 25. 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. JVM Java Virtual Machine: A TECNOLOGIA JAVA
  • 26. 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
  • 27. 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 !!! Java O que vamos ver na revisão: A TECNOLOGIA JAVA Vamos começar !!!
  • 28. 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?"); } }
  • 29. 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 varargs System.out.format("%s formatada %s vários %s", new String("Saida"), new String("com"), new String("paramêtros")); } } Exemplo 02
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa THREADS THREADS
  • 38. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa THREADS Threads Detalhes: • 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.
  • 39. 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
  • 40. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads O 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.
  • 41. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Detalhes: • 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
  • 42. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Detalhes: 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.
  • 43. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Ciclo de Vida: THREADS Fonte: http://www3.ntu.edu.sg/home/ehchua/programming/java/j5e_multithreading.html
  • 44. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Criando uma Thread: THREADS public class ExemploThread extends Thread { @Override public 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 Thread Classe Thread
  • 45. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Exemplo 01 package edu.anhanguera.prc.aula03; public class ExemploThread extends Thread { @Override public void run() { System.out.println("Executando ExemploThread"); } public static void main(String[] args) { ExemploThread exemploThread = new ExemploThread(); exemploThread.start(); } }
  • 46. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Detalhes: • 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
  • 47. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Criando 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
  • 48. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Exemplo 02 package 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(); } }
  • 49. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Threads Detalhes: • 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
  • 50. 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(); } }
  • 51. 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:
  • 52. 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(); } }
  • 53. 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) {} } }
  • 54. 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
  • 55. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa SINCRONIZAÇÃO SINCRONIZAÇÃO
  • 56. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Sincronização Detalhes: • 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
  • 57. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Sincronização Detalhes: • 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.
  • 58. 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(); } }
  • 59. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa SINCRONIZAÇÃO Resultado final incorreto. Deveria efetuar a contagem corretamente.
  • 60. 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(); } }
  • 61. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa SINCRONIZAÇÃO Contagem efetuada com sucesso. Valor final correto !!!
  • 62. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Sincronização Detalhes: 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.
  • 63. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa Sincronização Outro 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.
  • 64. 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; } }
  • 65. 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(); } }
  • 66. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa SINCRONIZAÇÃO Valor incorreto na conta corrente.
  • 67. 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(); } }
  • 68. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa SINCRONIZAÇÃO Saldo correto !!
  • 69. 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
  • 70. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS COMUNICAÇÃO ENTRE PROCESSOS
  • 71. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Comunicação Entre Processos O 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.
  • 72. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Comunicação Entre Processos Tipos de comunicação que vamos estudar: • Arquivos compartilhados utilizando Serialização de objetos em Java. • Comunicação Socket via TCP/IP.
  • 73. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Arquivos Compartilhados Detalhes: • 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.
  • 74. 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; } }
  • 75. 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) {} } } }
  • 76. 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) {} } } }
  • 77. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Arquivos Compartilhados Detalhes: • 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.
  • 78. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Sockets Detalhes: • 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.
  • 79. 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) {} } } }
  • 80. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Sockets Detalhes: • 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.
  • 81. 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; } }
  • 82. 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) {} } } }
  • 83. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Sockets Detalhes: • 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.
  • 84. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa COMUNICAÇÃO ENTRE PROCESSOS Sinais Detalhes: • 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.
  • 85. 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() { @Override public void run() { System.out.println("Terminando o programa"); } }); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } }
  • 86. 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
  • 87. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa DEADLOCK DEADLOCK
  • 88. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa DEADLOCK O que acontece nessa imagem?
  • 89. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa DEADLOCK Deadlock O 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.
  • 90. 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(); } }
  • 91. 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"); } }
  • 92. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa MEMÓRIA COMPARTILHADA MEMÓRIA COMPARTILHADA
  • 93. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa MEMÓRIA COMPARTILHADA Memória Compartilhada O 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.
  • 94. 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(); } } }
  • 95. 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; } } } }
  • 96. ANHANGUERA – 2016.1 PROGRAMAÇÃO CONCORRENTE LAB 01 – INSTALAÇÃO DO AMBIENTE JAVA Prof. Thomás da Costa thomascosta@aedu.com
  • 97. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa INSTALAÇÃO DO AMBIENTE JAVA INSTALAÇÃO DO AMBIENTE JAVA
  • 98. 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 ambiente O que vamos fazer:
  • 99. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa INSTALAÇÃO DO AMBIENTE JAVA • Instalador do Java JDK 1.7.0 http://www.oracle.com/technetwork/pt/java/javase/downloads/index.html • Eclipse Luna https://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 ambiente O que vamos precisar:
  • 100. 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 ambiente O que vamos fazer: Botão direito no ícone Windows. Selecionar a opção Sistema.
  • 101. 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.
  • 102. 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
  • 103. 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 = 32bits x64 = 64bits No nosso exemplo vamos baixar a versão Windows x64.
  • 104. 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.
  • 105. 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.
  • 106. 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.
  • 107. 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.
  • 108. 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 ambiente O que vamos fazer:
  • 109. 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 ambiente Dica: Variáveis de Ambiente e PATH https://technet.microsoft.com/pt-br/library/cc668471.aspx http://pt.wikipedia.org/wiki/Vari%C3%A1vel_de_ambiente http://en.wikipedia.org/wiki/PATH_%28variable%29
  • 110. 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.
  • 111. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa INSTALAÇÃO DO AMBIENTE JAVA Configurando o ambiente Selecionar “Configurações avançadas do sistema”
  • 112. PROGRAMAÇÃO CONCORRENTE – Prof. Thomás da Costa INSTALAÇÃO DO AMBIENTE JAVA Configurando o ambiente Selecionar “Variáveis de Ambiente” Clicar em “Novo”
  • 113. 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”
  • 114. 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”
  • 115. 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ída Terminamos !!!