Sei sulla pagina 1di 130

Universo

Java
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Galxia
JSE
Java Standard
Edition
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Constelao
Mais da linguagem
Java
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Tpicos

Parte I Tratamento de excees

Parte II Threads

Parte III Nmeros e Strings

Parte IV Collections e I/O

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Tpicos

Parte I Tratamento de excees

Parte II Threads

Parte III Nmeros e Strings

Parte IV Collections e I/O

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Parte II
Threads
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Tpicos

Desafios

Introduo

Questes de concursos

Estados de uma thread

Questes de concursos

Definindo e iniciando uma thread

Hora de praticar

Questes de concursos

Pausando uma thread

Hora de praticar
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Tpicos

Questes de concursos

Interrompendo uma thread

Hora de praticar

Esperando uma thread terminar

Hora de praticar

Questes de concursos

Prioridades de threads

Questes de concursos

Introduo sincronizao

Hora de praticar
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Tpicos

Bloqueando e sincronizando cdigos

Hora de praticar

Questes de concursos

Respostas dos desafios

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Desafios

[RGA] Quais so as duas unidades bsicas de execuo na


programao concorrente?
[RGA] A criao de uma nova thread requer mais recursos do
que a criao de um novo processo.

[RGA] Todo programa em Java multithreaded.

[RGA] O que e o que faz uma thread principal?

[RGA] Cada thread associada a uma instncia da classe [...].

[RGA] Quais so os estados que uma thread pode passar?

[RGA] Uma thread pode estar em mais de um estado em um


determinado tempo.
[RGA] Quais so as formas de criar uma thread em Java?
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

10

Desafios

[RGA] O que faz o mtodo Thread.sleep?

[RGA] O que faz o mtodo Thread.yield?

[RGA] O que faz o mtodo Thread.interrupt?

[RGA] O que faz o mtodo Thread.join?

[RGA] As prioridades de uma thread podem variam de quanto


at quanto?
[RGA] Por padro, qual a prioridade que uma thread pode
receber se no for definida nenhuma prioridade?
[RGA] Por padro, qual a prioridade que uma thread pode
receber se uma thread for construda de outra?

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

11

Desafios

[RGA] Se existirem duas ou mais threads de mesma prioridade


esperando para serem executadas, como a JVM escolher uma
delas?
[RGA] As prioridades das threads do Java so altamente
dependentes do sistema subjacente.

[RGA] O que uma condio de corrida?

[RGA] O que a excluso mtua?

[RGA] O que regio crtica?

[RGA] Quais so as formas de proteger um bloco contra


acesso simultneo?

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

12

Introduo

Existem duas unidades bsicas de execuo na programao


concorrente:

Processos

Threads

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

13

Introduo

Processos

Possuem um ambiente de execuo independente

So muitas vezes vistos como sinnimo de programas ou


aplicaes

Geralmente possuem um completo e privado conjunto bsicos de


recursos em tempo de execuo

No entanto, a viso do usurio uma nica aplicao que pode ser


de um conjunto de processos em cooperao

Comunicao entre processos

Inter Process Communication (IPC)

A maioria dos sistemas operacionais suportam recursos de


comunicao entre processos para facilitar a comunicao entre
eles

A maioria das implementaes de JVM executa como um nico


processo
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

14

Introduo

Threads

So chamados muitas vezes de processos leves (lightweight


processes)

Tanto os processos quanto as threads fornecem um ambiente de


execuo

Existem dentro de um processo

Mas a criao de uma nova thread requer menos recursos do que a


criao de um novo processo

Cada processo tem pelo menos uma thread

Compartilham os recursos do processo base

Incluindo:

Memria

Arquivos abertos

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

15

Introduo

Multithreading

uma caracterstica essencial da plataforma Java

Todo programa em Java multithreaded

Thread principal

Cada aplicao tem pelo menos essa thread

Toda aplicao Java comea por ela

Pode gerar outras threads

A JVM mantm algumas outras threads que realizam tarefas


como:

Coleta de lixo

Finalizao de objetos

Cada thread associada a uma instncia da classe


java.lang.Thread
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

16

Questes de concursos
[CESPE 2008 SGA/AC Cargo 28] Com base nos conceitos de
linguagens de programao e anlise de sistemas, julgue o item
a seguir.

[92] O Java, uma linguagem orientada a objetos, fornece um


ambiente interpretador e permite que os programas executem
mais de um thread de atividade.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

17

Questes de concursos
[CESPE 2008 SGA/AC Cargo 28] Com base nos conceitos de
linguagens de programao e anlise de sistemas, julgue o item
a seguir.

[92] O Java, uma linguagem orientada a objetos, fornece um


ambiente interpretador e permite que os programas executem
mais de um thread de atividade.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

18

Estados de uma thread

Nova
Nova

Executvel
Executvel

Concluda
Concluda

Em
Em espera
espera

Bloqueada
Bloqueada

Em
Em espera
espera
programada
programada

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

19

Estados de uma thread


Esperando notificao
Notificao ocorreu

Executvel
Executvel

Adquire o bloqueio
Bloqueio adquirido

Esperando tempo ou notificao


Tempo ou notificao ocorreu
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

Em
Em espera
espera

Bloqueada
Bloqueada

Em
Em espera
espera
programada
programada

20

Estados de uma thread

Nova

Quando se cria uma thread com o operador new

Neste estado, a thread ainda no executa

Executvel

Quando se invoca o mtodo start

Uma thread nesse estado pode entrar ou no em execuo

Depende do sistema operacional dar thread tempo para executar

Por essa razo que o estado se chama executvel (runnable)

E no em execuo (running)

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

21

Estados de uma thread

Concluda

H duas formas de concluso de uma thread:

Quando o mtodo run encerra normalmente

Quando o mtodo run no trata uma exceo

Bloqueada ou em espera

Uma thread em algum desses estados:

Est temporariamente inativa

No executa nenhum cdigo

Consome recursos mnimos

Ser reativada pelo agendador de thread

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

22

Estados de uma thread

Bloqueada ou em espera

Bloqueada

Uma thread bloqueada quando ela adquire um bloqueio de um


objeto que atualmente mantido por outra thread

Uma thread desbloqueada quando:

Todos as outras threads abandonam o bloqueio

O agendador de threads tiver permitido que a thread armazene o


bloqueio

Em espera

Quando uma thread espera por outra para notificar o agendador de


uma condio

Na prtica, no significativa a diferena entre:

Esse estado

O estado de bloqueada

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

23

Estados de uma thread

Bloqueada ou em espera

Espera programada

Vrios mtodos possuem um parmetro de tempo limite

Chamar esses mtodos faz com que uma thread entre nesse estado

O estado persiste at:

O tempo limite expirar

A notificao apropriada ter sido recebida

Importante

Uma thread pode estar em apenas um estado em um


determinado tempo
Esses estados:

So de mquinas virtuais

No refletem quaisquer estados de threads do sistema operacional


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

24

Questes de concursos
[FCC 2008 MPE/RS Tcnico em Informtica rea Sistemas Classe M Questo 14] A classe Thread, utilizada para disparar
segmentos de processamento separados dentro de um programa
Java, quando est na fila apenas aguardando a sua vez para a
CPU se encontra no estado

[A] monitor waiting.

[B] waiting.

[C] sleeping.

[D] runnable.

[E] running.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

25

Questes de concursos
[FCC 2008 MPE/RS Tcnico em Informtica rea Sistemas Classe M Questo 14] A classe Thread, utilizada para disparar
segmentos de processamento separados dentro de um programa
Java, quando est na fila apenas aguardando a sua vez para a
CPU se encontra no estado

[A] monitor waiting.

[B] waiting.

[C] sleeping.

[D] runnable.

[E] running.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

26

Questes de concursos
[FCC 2006 MPE/PE Analista Ministerial rea Informtica
Questo 35] Sobre Java, considere:

[I] Uma thread pode ser executada mesmo que seu mtodo
run tenha completado ou terminado por alguma razo.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

27

Questes de concursos
[FCC 2006 MPE/PE Analista Ministerial rea Informtica
Questo 35] Sobre Java, considere:

[I] Uma thread no pode ser executada mesmo que quando


seu mtodo run tenha completado ou terminado por alguma
razo.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

28

Questes de concursos
[CESPE 2011 PREVIC Cargo 4] Acerca de programao Java e
JavaScript, julgue o item que se segue.

[93] Em um programa Java, um thread que esteja bloqueado,


espera de um recurso de entrada ou sada, retornar para o
estado de execuo quando o recurso for disponibilizado.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

29

Questes de concursos
[CESPE 2011 PREVIC Cargo 4] Acerca de programao Java e
JavaScript, julgue o item que se segue.

[93] Em um programa Java, um thread que esteja bloqueado,


espera de um recurso de entrada ou sada, retornar para o
estado de execuo executvel quando o recurso for
disponibilizado.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

30

Questes de concursos
[AOCP 2012 BRDE Analista de Sistemas Desenvolvimento de
Sistemas Prova TIPO 4] Analise as assertivas e assinale a
alternativa que aponta as corretas sobre os diferentes estados
que uma Thread Java pode estar.

[I] Nova

[II] Executvel

[III] Bloqueada

[IV] Terminada

[V] Esquecida

[VI] Persistida.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

31

Questes de concursos
[AOCP 2012 BRDE Analista de Sistemas Desenvolvimento de
Sistemas Prova TIPO 4] Analise as assertivas e assinale a
alternativa que aponta as corretas sobre os diferentes estados
que uma Thread Java pode estar.

[I] Nova

[II] Executvel

[III] Bloqueada

[IV] Terminada

[V] Esquecida

[VI] Persistida.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

32

Questes de concursos
[AOCP 2012 BRDE Analista de Sistemas Desenvolvimento de
Sistemas Prova TIPO 4] Analise as assertivas e assinale a
alternativa que aponta as corretas sobre os diferentes estados
que uma Thread Java pode estar.

[A] Apenas I, II e III.

[B] Apenas I, II, III e IV.

[C] Apenas I, II, III, IV e V.

[D] Apenas I, II, III e V.

[E] I, II, III, IV, V e VI.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

33

Definindo e iniciando uma thread

Object
Object

Thread
Thread

Runnable
Runnable

Classe1
Classe1

Classe2
Classe2

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

34

Definindo e iniciando uma thread

java.lang.Thread

package java.lang;

public class Thread implements Runnable {

public void run() {

java.lang.Runnable

package java.lang;

public interface Runnable {

public abstract void run();

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

35

Definindo e iniciando uma thread

java.lang.Thread

public Thread() e public Thread(Runnable destino)

public void start

Instanciam um objeto thread


Inicia a thread para ser executada

public void run

chamado pela JVM

Nunca chamado diretamente

Contm o cdigo a ser executado pela thread

java.lang.Runnable

public void run

Deve ser sobrescrito e implementado com instrues para a tarefa


que ser executada
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

36

Definindo e iniciando uma thread

Duas formas de criar uma thread em Java:

Forma 1:

Estender a classe java.lang.Thread

Sobrescrever o seu mtodo public void run()

mais fcil de usar em aplicaes simples

Mas limitado pelo fato de que a classe deve ser descendente de


Thread

Forma 2:

Implementar a interface java.lang.Runnable

Sobrescrever e implementar o seu mtodo public void run()

mais utilizada

A classe que implementa Runnable pode ser uma subclasse diferente


de Thread

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

37

Definindo e iniciando uma thread

Duas formas de criar uma thread em Java:

Forma 1:

Exemplo:

Classe que estende Thread

public class Classe extends Thread {

public void run() {

System.out.println(Estendendo a classe Thread.);

}
}
Classe principal:

public class Exemplo {

public static void main(String args[]) {

Classe thread = new Classe();

thread.start();

}
}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

38

Definindo e iniciando uma thread

Duas formas de criar uma thread em Java:

Forma 2:

Exemplo:

Classe que implementa Runnable:

public class Classe implements Runnable {

public void run() {

System.out.println(Implementando a interface Runnable.);

}
}
Classe principal:

public class Exemplo {

public static void main(String args[]) {

Classe objeto = new Classe();

Thread thread = new Thread(objeto);

thread.start();

}
}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

39

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

40

Hora de praticar

constelacao03.parte02

Exemplo01_DefinindoIniciandoThreads

constelacao03.parte02.classes

EstendendoThread

ImplementandoRunnable

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

41

Questes de concursos
[ESAF 2006 CGU Analista de Finanas e Controle Tecnologia
da Informao Questo 18] As unidades concorrentes em Java
so objetos que incluem um mtodo chamado run, cujo cdigo
pode estar em execuo concorrente. Uma das maneiras de se
definir uma classe cujos objetos podem ter mtodos
concorrentes definir uma

[A] classe abstrata run e, em seguida, definir subclasses run.


[B] subclasse da classe predefinida thread, que fornece
suporte para o mtodo run.

[C] exceo para o mtodo run.

[D] exceo para o mtodo main.

[E] exceo com interrupo para o mtodo run ativo, sempre


que um novo mtodo run for instanciado.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

42

Questes de concursos
[ESAF 2006 CGU Analista de Finanas e Controle Tecnologia
da Informao Questo 18] As unidades concorrentes em Java
so objetos que incluem um mtodo chamado run, cujo cdigo
pode estar em execuo concorrente. Uma das maneiras de se
definir uma classe cujos objetos podem ter mtodos
concorrentes definir uma

[A] classe abstrata run e, em seguida, definir subclasses run.


[B] subclasse da classe predefinida thread, que fornece
suporte para o mtodo run.

[C] exceo para o mtodo run.

[D] exceo para o mtodo main.

[E] exceo com interrupo para o mtodo run ativo, sempre


que um novo mtodo run for instanciado.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

43

Questes de concursos
[CESPE 2012 ANAC Cargo 4] Acerca da execuo dos trechos de
cdigos referentes linguagem de programao Java, julgue os
itens seguintes.

[68] O seguinte cdigo ir compilar, mas nenhum resultado


ser mostrado no console.

public class OutTeste extends Thread{

public static void main(String argv[]){

teste.start();

public void run(){

OutTeste teste = new OutTeste();

System.out.println("ANAC");

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

44

Questes de concursos
[CESPE 2012 ANAC Cargo 4] Acerca da execuo dos trechos de
cdigos referentes linguagem de programao Java, julgue os
itens seguintes.

[68] O seguinte cdigo ir compilar, mas nenhum resultado e


ser mostrado no console o texto ANAC.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

45

Pausando uma thread

Thread.sleep

Suspende a execuo da thread atual por um perodo


especificado

Aps o perodo especificado, a thread volta ao estado executvel

um meio eficiente de fazer o tempo de processador disponvel


para que outras threads possam estar em execuo

A thread no perde a propriedade de quaisquer monitores

O tempo estipulado no sleep:

No garantido

Porque ele limitados pela facilidade oferecida pelo sistema


operacional subjacente

Pode ser interrompido

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

46

Pausando uma thread

Thread.sleep

public static void sleep(long milissegundos)

Suspende a execuo da thread atual pelo nmero especificado de


milissegundos

Lana as excees:

InterruptedException se a thread interrompida durante sua


inatividade

IllegalArgumentException se o valor do milissegundo negativo

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

47

Pausando uma thread

Thread.sleep

public static void sleep(long milissegundos, int nanossegundos)

Suspende a execuo da thread atual pelos nmeros especificados


de:

Milissegundos

Nanossegundos

Lanas as excees:

InterruptedException se a thread interrompida durante sua


inatividade
IllegalArgumentException se:

O valor do milissegundo negativo


O valor do nanossegundo no est entre 0 e 999999

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

48

Pausando uma thread

Thread.yield

Faz com que uma thread atualmente em execuo


temporariamente pause para permitir que outras possam ser
executadas

A thread atual cede voluntariamente a JVM para outras

Se houver outras threads executveis com uma prioridade mais


alta que a prioridade da thread que est cedendo a JVM, elas
sero agendadas em seguida

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

49

Pausando uma thread

Thread.yield

O seu comportamento imprevisvel, pois varia de acordo com:

Sistema operacional

Verso do Java

public static void yield()

Exemplo:

public void run() {

while (true) {

// Realiza uma tarefa com uso da JVM.

// Cede a JVM para outra threads.


Thread.yield();

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

50

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

51

Hora de praticar

constelacao03.parte02

Exemplo02_PausandoThreadsSleep

Exemplo03_PausandoThreadsYield

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

52

Questes de concursos
[FUNIVERSA 2012 PC/DF Perito Criminal Informtica]

public class MinhaThread implements Runnable {

static int j = 100;

public static void main(String[] args) {

MinhaThread mt = new MinhaThread();

new Thread(mt).start();

Thread.yield();

System.out.println(j);

public void run() {

j++; ++j;

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

53

Questes de concursos
[FUNIVERSA 2012 PC/DF Perito Criminal Informtica] Com
base na execuo do programa Java apresentado, assinale a
alternativa correta.

[A] H erro em tempo de execuo.

[B] O resultado 100.

[C] O resultado 101.

[D] O resultado 102.

[E] No possvel determinar o resultado do programa.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

54

Questes de concursos
[FUNIVERSA 2012 PC/DF Perito Criminal Informtica] Com
base na execuo do programa Java apresentado, assinale a
alternativa correta.

[A] H erro em tempo de execuo.

[B] O resultado 100.

[C] O resultado 101.

[D] O resultado 102.

[E] No possvel determinar o resultado do programa.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

55

Questes de concursos
[FCC 2009 TRE/AM - Tcnico Judicirio - Programao de
Sistemas Questo 45] Quanto aos escalonamentos de threads
em Java, considere:

[II] Chamando o mtodo run(), uma thread sugere que deseja


abrir mo do controle da CPU, permitindo que outra thread
tenha a oportunidade de ser executada.
[III] Para que todas as threads tenham uma quantidade igual
de tempo de CPU em um sistema que no realiza a repartio
de tempo, uma thread pode abandonar o controle da CPU com
o mtodo yield().

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

56

Questes de concursos
[FCC 2009 TRE/AM - Tcnico Judicirio - Programao de
Sistemas Questo 45] Quanto aos escalonamentos de threads
em Java, considere:

[II] Chamando o mtodo run() yield(), uma thread sugere que


deseja abrir mo do controle da CPU, permitindo que outra
thread tenha a oportunidade de ser executada.

Gabarito: ERRADO.

[III] Para que todas as threads tenham uma quantidade igual


de tempo de CPU em um sistema que no realiza a repartio
de tempo, uma thread pode abandonar o controle da CPU com
o mtodo yield().

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

57

Questes de concursos
[ESAF 2008 STN Analista de Finanas e Controle Tecnologia
da Informao Desenvolvimento de Sistemas da Informao Questo 25] Considere o seguinte fragmento de cdigo, para o
mtodo run() de uma determinada linha de execuo (thread),
em Java.

1. try{

2. sleep(1000);

3. } catch (InterruptedException ie){}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

58

Questes de concursos
[ESAF 2008 STN Analista de Finanas e Controle Tecnologia
da Informao Desenvolvimento de Sistemas da Informao Questo 25] Se considerarmos que a linha de execuo no
interrompida, correto afirmar que

[A] o cdigo no compila.


[B] a linha de execuo entra em estado Pronto, aps 1000
milissegundos.
[C] a linha de execuo entra em estado Pronto, em
exatamente 1000 milissegundos.
[D] a linha de execuo entra em estado Pronto, em pelo
menos 1000 milissegundos.
[E] o cdigo compila, mas no executa, lanando uma exceo
do tipo ThreadException.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

59

Questes de concursos
[ESAF 2008 STN Analista de Finanas e Controle Tecnologia
da Informao Desenvolvimento de Sistemas da Informao Questo 25] Se considerarmos que a linha de execuo no
interrompida, correto afirmar que

[A] o cdigo no compila.


[B] a linha de execuo entra em estado Pronto (executvel),
aps 1000 milissegundos.
[C] a linha de execuo entra em estado Pronto, em
exatamente 1000 milissegundos.
[D] a linha de execuo entra em estado Pronto, em pelo
menos 1000 milissegundos.
[E] o cdigo compila, mas no executa, lanando uma exceo
do tipo ThreadException.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

60

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[A] O mtodo yield utilizado para forar um thread a entrar


no modo de suspenso.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

61

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[A] O mtodo yield utilizado para forar um thread a entrar


no modo de suspenso.

Gabarito: ERRADO.
O mtodo yield faz com que uma thread atualmente em
execuo temporariamente pause para permitir que outras
possam ser executadas

A thread atual cede voluntariamente a JVM para outras

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

62

Interrompendo uma thread

java.lang.Thread

public void interrupt()

Envia uma solicitao de interrupo para uma thread

Altera o status de interrompido da thread para true

Lana as excees:

InterruptedException se a thread estiver inativa por uma chamada


sleep
SecurityException se a thread atual no pode modificar outra

public static boolean interrupted()

Testa se a thread atual foi interrompida

Altera o status de interrompido da thread para false

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

63

Interrompendo uma thread

java.lang.Thread

public boolean isInterrupted()

Testa se uma thread foi interrompida

No altera o status de interrompido da thread

public static Thread currentThread()

Retorna o objeto Thread que representa a thread atual em


execuo

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

64

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

65

Hora de praticar

constelacao03.parte02

Exemplo04_InterrompendoThreads

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

66

Esperando uma thread terminar

Thread.join

Permite uma thread esperar que outra termine

public final void join()

As outras threads esperam pela finalizao da thread que chamou o


mtodo

Lana a exceo:

InterruptedException se uma outra thread interrompeu a atual

public final void join(long milissegundos)

As outras threads esperam pelo nmero especificado de


milissegundos pela finalizao da thread que chamou o mtodo

Um tempo limite de 0 significa uma espera para sempre

Lana as excees:

InterruptedException se uma outra thread interrompeu a atual

IllegalArgumentException se o valor do milissegundo negativo

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

67

Esperando uma thread terminar

Thread.join

public final void join(long milissegundos, int nanossegundos)

As outras threads esperam pelos nmeros especificados de


milissegundos e nanossegundos pela finalizao da thread que
chamou o mtodo

Um tempo limite de 0 significa uma espera para sempre

Lana as excees:

InterruptedException se uma outra thread interrompeu a atual


IllegalArgumentException se:

O valor do milissegundo negativo


O valor do nanossegundo no est entre 0 e 999999

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

68

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

69

Hora de praticar

constelacao03.parte02

Exemplo05_Join

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

70

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[B] O mtodo join utilizado para garantir que determinado


thread no seja executado at que outro tenha entrado no
estado inativo.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

71

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[B] O mtodo join utilizado para garantir que determinado


thread no seja executado at que outro tenha entrado no
estado inativo.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

72

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] Sejam as seguintes classes
Java:

public class Xpto implements Runnable {

public void run()

try {

Thread.currentThread().join(0);
System.out.println(10);

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

73

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] Sejam as seguintes classes
Java:

public class Xpto implements Runnable {

public void run()

catch(SecurityException e) {

System.out.println(20);

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

74

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] Sejam as seguintes classes
Java:

public class Xpto implements Runnable {

public void run()

catch(IllegalMonitorStateException e) {

System.out.println(30);

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

75

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] Sejam as seguintes classes
Java:

public class Xpto implements Runnable {

public void run()

catch(IllegalArgumentException e) {

System.out.println(40);

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

76

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] Sejam as seguintes classes
Java:

public class Xpto implements Runnable {

public void run()

catch(Exception e) {

System.out.println(50);

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

77

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] Sejam as seguintes classes
Java:

public class Q04 {

public static void main(String[] args) {

Thread t=new Thread(new Xpto());

t.start();

t.interrupt();

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

78

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] O que ser exibido no
console aps a execuo do comando t.interrupt()?

[A] 10

[B] 20

[C] 30

[D] 40

[E] 50

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

79

Questes de concursos
[CESGRANRIO 2012 PETROBRAS Analista de Sistemas Jnior
Engenharia de Software Questo 23] O que ser exibido no
console aps a execuo do comando t.interrupt()?

[A] 10

[B] 20

[C] 30

[D] 40

[E] 50

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

80

Prioridades de threads

Escalonamento de tarefas

o conceito de a JVM definir uma ordem para que as threads


ocupem o processador de forma que o usurio tem a iluso de
que elas realmente executam concorrentemente

Cada thread possui uma prioridade

As prioridades variam:

De 1 (MIN_PRIORITY)

A 10 (MAX_PRIORITY)

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

81

Prioridades de threads

Por padro:

Se no for definida nenhuma prioridade:

Se uma thread for construda de outra:

A thread receber a prioridade padro de valor 5 (NORM_PRIORITY)


A thread criada herda a prioridade da thread a construiu

A JVM utilizar a prioridade de uma thread para realizar o


escalonamento

Sempre que o escalonador tiver oportunidade de escolher uma


nova thread, ele preferir as com a mais alta prioridade
Uma thread de menor prioridade apenas ser executada:

Se a thread atual for para algum estado suspenso

Se o mtodo run() da a thread atual terminar

Se a thread atual chamar o mtodo yield()


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

82

Prioridades de threads

A JVM utilizar a prioridade de uma thread para realizar o


escalonamento

Se existirem duas ou mais threads de mesma prioridade


esperando para serem executadas, a JVM escolher uma delas de
forma parecida ao escalonamento round-robin

um algoritmo de escalonamento que atribui fraes de tempo


para cada processo:

Em partes iguais

De forma circular

Manipula todos os processos sem prioridades

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

83

Prioridades de threads

As prioridades das threads do Java so altamente dependentes


do sistema subjacente

Elas so mapeadas para os nveis de prioridades do sistema, que


pode conter mais ou menos nveis em relao aos 10 nveis do
Java
Exemplos:

Windows possui sete nveis de prioridades

Algumas prioridades do Java sero mapeadas para o mesmo nvel do


sistema operacional

Sun JVM para Linux ignora completamente as prioridades de thread

Todas as threads possuem a mesma prioridade

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

84

Prioridades de threads

java.lang.Thread

public final void setPriority(int prioridade)

Configura a prioridade da thread

Lana a exceo:

IllegalArgumentException se a prioridade no est no intervalo entre:


MIN_PRIORITY
MAX_PRIORITY
SecurityException se a thread atual no pode modificar outra

public final void getPriority()

Retorna a prioridade da thread

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

85

Prioridades de threads

java.lang.Thread

public static final int MIN_PRIORITY

a menor prioridade que uma thread pode ter

Possui o valor 1

public static final int NORM_PRIORITY

a prioridade padro de uma thread

Possui o valor 5

public static final int MAX_PRIORITY

a maior prioridade que uma thread pode ter

Possui o valor 10

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

86

Questes de concursos
[FCC 2009 TRE/AM - Tcnico Judicirio - Programao de
Sistemas Questo 45] Quanto aos escalonamentos de threads
em Java, considere:

[I] Em sistemas que aceitam preempo, uma thread


executando em uma CPU tambm pode ser interrompida por
uma thread de prioridade mais alta.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

87

Questes de concursos
[FCC 2009 TRE/AM - Tcnico Judicirio - Programao de
Sistemas Questo 45] Quanto aos escalonamentos de threads
em Java, considere:

[I] Em sistemas que aceitam preempo, uma thread


executando em uma CPU tambm pode ser interrompida por
uma thread de prioridade mais alta.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

88

Questes de concursos
[FCC 2006 MPE/PE Analista Ministerial rea Informtica
Questo 35] Sobre Java, considere:

[II] Uma thread executvel de prioridade mais alta pode fazer


preempo da thread de prioridade mais baixa.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

89

Questes de concursos
[FCC 2006 MPE/PE Analista Ministerial rea Informtica
Questo 35] Sobre Java, considere:

[II] Uma thread executvel de prioridade mais alta pode fazer


preempo da thread de prioridade mais baixa.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

90

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[E] Todo thread recebe uma prioridade padro que igual ao


menor nvel de prioridade possvel. Para configurar essa
prioridade, pode ser utilizado o mtodo setPriority.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

91

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[E] Todo thread recebe uma prioridade padro que igual ao


menor nvel de prioridade possvel valor 5 (NORM_PRIORITY).
Para configurar essa prioridade, pode ser utilizado o mtodo
setPriority.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

92

Questes de concursos
[AOCP 2012 BRDE Analista de Sistemas Suporte] Sobre
Prioridade e Agendamento de Thread na linguagem de
programao Java, analise as assertivas e assinale a alternativa
que aponta a(s) correta(s).

[I] Por padro, toda thread recebe uma DEFAULT_PRIORITY


(uma constante de 5).
[II] Toda Thread do Java tem uma prioridade de thread que,
auxilia na ordenao em que esto agendadas.
[III] O agendamento de Thread consegue garantir que em
diferentes Sistemas operacionais, cada processo gastar a
mesma fatia de tempo.
[IV] Em Java, cada nova Thread herda a prioridade da Thread
que a cria.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

93

Questes de concursos
[AOCP 2012 BRDE Analista de Sistemas Suporte] Sobre
Prioridade e Agendamento de Thread na linguagem de
programao Java, analise as assertivas e assinale a alternativa
que aponta a(s) correta(s).

[I] Por padro, toda thread recebe uma DEFAULT_PRIORITY


NORM_PRIORITY (uma constante de 5).
[II] Toda Thread do Java tem uma prioridade de thread que,
auxilia na ordenao em que esto agendadas.
[III] O agendamento de Thread no consegue garantir que em
diferentes Sistemas operacionais, cada processo gastar a
mesma fatia de tempo.
[IV] Em Java, cada nova Thread herda a prioridade da Thread
que a cria.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

94

Questes de concursos
[AOCP 2012 BRDE Analista de Sistemas Suporte] Sobre
Prioridade e Agendamento de Thread na linguagem de
programao Java, analise as assertivas e assinale a alternativa
que aponta a(s) correta(s).

[A] Apenas I.

[B] Apenas II e IV.

[C] Apenas I, III e IV.

[D] Apenas II, III e IV.

[E] I, II, III e IV.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

95

Introduo sincronizao

A maior parte dos programas multithreadeds necessitam que


as threads compartilhem o acesso aos mesmos dados
Termos:

Condio de corrida

Tambm chamada de condio de concorrncia

a situao onde:

Dois ou mais processos acessam dados compartilhados

O resultado final depende da ordem em que os processos so


executados

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

96

Introduo sincronizao

Termos:

Excluso mtua

a forma de evitar o problema de condio de corrida

Garante que somente um processo estar usando os dados


compartilhados num dado momento

O seu objetivo proibir que mais de um processo entre em sua


regio crtica

Regio crtica

parte do programa (trecho de cdigo) em que os dados


compartilhados so acessados

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

97

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

98

Hora de praticar

constelacao03.parte02

Exemplo06_CondicaoCorrida

constelacao03.parte02.classes.naobloqueado

Banco

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

99

Bloqueando e sincronizando cdigos

Na linguagem Java, h duas formas de proteger um bloco


contra acesso simultneo:

Interface Lock e classe ReentrantLock

A classe ReentrantLock implementa a interface Lock

Palavra-chave synchronized

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

100

Bloqueando e sincronizando cdigos

Interface Lock e classe ReentrantLock

java.util.concurrent.locks.Lock

void lock()

void unlock()

Obtm o bloqueio se no obtido por outra thread


Libera o bloqueio

java.util.concurrent.locks.ReentrantLock

public ReentrantLock()

Constri um bloqueio reentrante que pode ser utilizado para proteger


uma seo crtica

public ReentrantLock(boolean fair)

Constri um bloqueio com dada diretiva de uso aceitvel

Um bloqueio aceitvel favorece a thread que esperou mais tempo


Pode comprometer o desempenho das aplicaes
Por padro, os bloqueios no so aceitveis

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

101

Bloqueando e sincronizando cdigos

Interface Lock e classe ReentrantLock

Esquema bsico de uso:

Lock lock = new ReentrantLock();

lock.lock();

try {

} finally {

// Seo crtica.

lock.unlock();

importante que o mtodo unlock esteja dentro de uma clusula


finally

Caso o cdigo da seo crtica lance uma exceo, haver o


desbloqueio

Caso contrrio, as outras threads sero bloqueados para sempre


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

102

Bloqueando e sincronizando cdigos

Palavra-chave synchronized

H duas formas de uso da sincronizao:

Sincronizao de declaraes

Sintaxe:

public void metodo() {

synchronized (this) {

// Contedo do mtodo.

}
}

Sincronizao de mtodos

Sintaxe:

public synchronized void metodo() {

// Contedo do mtodo.
}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

103

Bloqueando e sincronizando cdigos

java.lang.Object

public final void wait()

Faz uma thread esperar at ser notificada por outra que invoca um
dos mtodos:

notify()

notifyAll()

Apenas pode ser chamado dentro de um bloco ou mtodo


sincronizado

Lana a exceo:

InterruptedException se uma outra thread interrompeu a atual antes da


ou enquanto a atual espera uma notificao
IllegalMonitorStateException se a thread atual no a proprietrio do
monitor do objeto

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

104

Bloqueando e sincronizando cdigos

java.lang.Object

public final void wait(long milissegundos)

Faz uma thread esperar at:

Ser notificada por outra que invoca um dos mtodos:

notify()
notifyAll()
Que um perodo de tempo especificado tenha passado

Apenas pode ser chamado dentro de um bloco ou mtodo


sincronizado

Lana a exceo:

InterruptedException se uma outra thread interrompeu a atual antes da


ou enquanto a atual espera uma notificao
IllegalMonitorStateException se a thread atual no a proprietrio do
monitor do objeto
IllegalArgumentException se o valor do milissegundo negativo

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

105

Bloqueando e sincronizando cdigos

java.lang.Object

public final void wait(long milissegundos, int nanossegundos)

Faz uma thread esperar at:

Ser notificada por outra que invoca um dos mtodos notify() ou


notifyAll()
Que um perodo de tempo especificado tenha passado

Apenas pode ser chamado dentro de um bloco ou mtodo


sincronizado

Lana a exceo:

InterruptedException se uma outra thread interrompeu a atual antes da


ou enquanto a atual espera uma notificao
IllegalMonitorStateException se a thread atual no a proprietrio do
monitor do objeto
IllegalArgumentException se:

O valor do milissegundo negativo


O valor do nanossegundo no est entre 0 e 999999

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

106

Bloqueando e sincronizando cdigos

java.lang.Object

public final void notify()

Desbloqueia uma thread selecionada aleatoriamente entre as


threads que chamaram wait para um objeto

Apenas pode ser chamado dentro de um bloco ou mtodo


sincronizado

Lana a exceo:

IllegalMonitorStateException se a thread atual no a proprietrio do


monitor do objeto

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

107

Bloqueando e sincronizando cdigos

java.lang.Object

public final void notifyall()

Desbloqueia todas as threads que chamaram wait para um objeto

Apenas pode ser chamado dentro de um bloco ou mtodo


sincronizado

Lana a exceo:

IllegalMonitorStateException se a thread atual no a proprietrio do


monitor do objeto

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

108

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

109

Hora de praticar

constelacao03.parte02

Exemplo07_Lock

constelacao03.parte02.classes.bloqueado

Banco

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

110

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[D] Mtodos static no podem ser synchronized.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

111

Questes de concursos
[CESPE 2010 INMETRO Cargo 14 - Questo 64] Em relao ao
uso de threads na linguagem Java, assinale a opo correta.

[D] Mtodos static no podem ser synchronized.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

112

Questes de concursos
[CESPE 2007 Corpo de Bombeiros Militar do Distrito Federal
Opo 27] Quanto a programao Java usando threads, sockets e
applets, julgue os itens subseqentes.

[59] Se, em uma classe, os mtodos so synchronized, ento


vrios threads no podem executar concorrentemente esses
mtodos sobre diferentes instncias dessa classe, mas podem
executar sobre uma mesma instncia.
[60] Quando os objetos acessados por diferentes threads
compartilham atributos de classe, os threads podem,
concorrentemente, modificar os valores desses atributos,
mesmo se acessarem os objetos via mtodos synchronized.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

113

Questes de concursos
[CESPE 2007 Corpo de Bombeiros Militar do Distrito Federal
Opo 27] Quanto a programao Java usando threads, sockets e
applets, julgue os itens subseqentes.

[59] Se, em uma classe, os mtodos so synchronized, ento


vrios threads no podem executar concorrentemente esses
mtodos sobre diferentes instncias dessa classe, mas e
podem executar sobre uma mesma instncia.

Gabarito: ERRADO.

[60] Quando os objetos acessados por diferentes threads


compartilham atributos de classe, os threads podem,
concorrentemente, modificar os valores desses atributos,
mesmo se acessarem os objetos via mtodos synchronized.

Gabarito: CERTO.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

114

Questes de concursos
[CESPE 2007 Corpo de Bombeiros Militar do Distrito Federal
Opo 27] Quanto a programao Java usando threads, sockets e
applets, julgue os itens subseqentes.

[61] Os mtodos wait() e notify() usados para sincronizar


threads no podem ser invocados a partir de mtodos
synchronized, nem a partir de mtodos que tenham sido
invocados a partir de mtodos synchronized.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

115

Questes de concursos
[CESPE 2007 Corpo de Bombeiros Militar do Distrito Federal
Opo 27] Quanto a programao Java usando threads, sockets e
applets, julgue os itens subseqentes.

[61] Os mtodos wait() e notify() usados para sincronizar


threads no apenas podem ser invocados a partir de blocos e
mtodos synchronized, nem a partir de mtodos que tenham
sido invocados a partir de mtodos synchronized.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

116

Questes de concursos
[CESGRANRIO 2013 BNDES - Anlise de Sistemas
Desenvolvimento Questo 43] Qual mtodo pertencente
biblioteca nativa de Java NO capaz de bloquear a execuo de
uma thread?

[A] Object.wait()

[B] ReentrantLock.lock()

[C] Thread.join()

[D] FileInputStream.read()

[E] Thread.yield()

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

117

Questes de concursos
[CESGRANRIO 2013 BNDES - Anlise de Sistemas
Desenvolvimento Questo 43] Qual mtodo pertencente
biblioteca nativa de Java NO capaz de bloquear a execuo de
uma thread?

[A] Object.wait()

[B] ReentrantLock.lock()

[C] Thread.join()

[D] FileInputStream.read()

[E] Thread.yield()

Faz com que uma thread atualmente em execuo


temporariamente pause para permitir que outras possam ser
executadas

A thread atual cede voluntariamente a JVM para outras


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

118

Respostas dos desafios

[RGA] Quais so as duas unidades bsicas de execuo na


programao concorrente?

Processos

Threads

[RGA] A criao de uma nova thread requer mais menos


recursos do que a criao de um novo processo.

Gabarito: ERRADO.

[RGA] Todo programa em Java multithreaded.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

119

Respostas dos desafios

[RGA] O que e o que faz uma thread principal?

Cada aplicao tem pelo menos essa thread

Toda aplicao Java comea por ela

Pode gerar outras threads

[RGA] Cada thread associada a uma instncia da classe


java.lang.Thread.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

120

Respostas dos desafios

[RGA] Quais so os estados que uma thread pode passar?

Nova

Executvel

Concluda

Em espera

Bloqueada

Em espera programada

[RGA] Uma thread pode estar em mais de apenas um estado


em um determinado tempo.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

121

Respostas dos desafios

[RGA] Quais so as formas de criar uma thread em Java?

Forma 1:

Estender a classe java.lang.Thread

Sobrescrever o seu mtodo public void run()

Forma 2:

Implementar a interface java.lang.Runnable

Sobrescrever e implementar o seu mtodo public void run()

[RGA] O que faz o mtodo Thread.sleep?

Suspende a execuo da thread atual por um perodo


especificado

Aps o perodo especificado, a thread volta ao estado executvel

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

122

Respostas dos desafios

[RGA] O que faz o mtodo Thread.yield?

Faz com que uma thread atualmente em execuo


temporariamente pause para permitir que outras possam ser
executadas

[RGA] O que faz o mtodo Thread.interrupt?

A thread atual cede voluntariamente a JVM para outras

Envia uma solicitao de interrupo para uma thread

[RGA] O que faz o mtodo Thread.join?

Permite uma thread esperar que outra termine

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

123

Respostas dos desafios

[RGA] As prioridades de uma thread podem variam de quanto


at quanto?

De 1 (MIN_PRIORITY)

A 10 (MAX_PRIORITY)

[RGA] Por padro, qual a prioridade que uma thread pode


receber se no for definida nenhuma prioridade?

A thread receber a prioridade padro de valor 5


(NORM_PRIORITY)

[RGA] Por padro, qual a prioridade que uma thread pode


receber se uma thread for construda de outra?

A thread criada herda a prioridade da thread a construiu

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

124

Respostas dos desafios

[RGA] Se existirem duas ou mais threads de mesma prioridade


esperando para serem executadas, como a JVM escolher uma
delas?

[RGA] As prioridades das threads do Java so altamente


dependentes do sistema subjacente.

Atravs de um igual ao escalonamento round-robin

Gabarito: CERTO.

[RGA] O que uma condio de corrida?

a situao onde:

Dois ou mais processos acessam dados compartilhados

O resultado final depende da ordem em que os processos so


executados
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

125

Respostas dos desafios

[RGA] O que a excluso mtua?

O seu objetivo proibir que mais de um processo entre em sua


regio crtica

[RGA] O que regio crtica?

a forma de evitar o problema de condio de corrida

parte do programa (trecho de cdigo) em que os dados


compartilhados so acessados

[RGA] Quais so as formas de proteger um bloco contra


acesso simultneo?

Interface Lock e classe ReentrantLock

A classe ReentrantLock implementa a interface Lock

Palavra-chave synchronized
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

126

Referncias

Apostila Java e Orientao a Objetos da Caelum:


http://www.caelum.com.br/download/caelum-java-objetosfj11.pdf
Apostila Java e Orientao a Objetos da K19:
http://www.k19.com.br/downloads/apostilas/java/k19-k11orientacao-a-objetos-em-java
Class Thread:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thre
ad.html
Cap. 9 - Threads (Segmentos):
http://javafree.uol.com.br/artigo/6955/Cap-9-ThreadsSegmentos.html

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

127

Referncias

Enum Thread.State:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thre
ad.State.html
HORSTMANN, Cay S. e CORNELL, Gary. Core Java Volume I Fundamentos. 8 Edio. Editora Pearson Prentice Hall, 2010.
How-To: Implementando Threads em Java:
http://imasters.com.br/artigo/20205/java/how-toimplementando-threads-em-java/
How to join thread in java: http://www.javaconnect.com/thread/How-to-join-thread-in-java.html
Introduo ao uso de Threads em Java:
http://www.ime.usp.br/~gold/cursos/2004/mac438/threadsE
mJava.pdf
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

128

Referncias

SIERRA, Kate e BATES, Bert. Certificao Sun para


Programador e Desenvolvedor em Java 2 Guia de Estudos. 3
Edio. Editora Alta Books, 2003.
The Java Language Specification - Java SE 7 Edition:
http://docs.oracle.com/javase/specs/jls/se7/html/
The Java Tutorials - Concurrency:
http://docs.oracle.com/javase/tutorial/essential/concurrency
/
Thread.yield:
http://www.javamex.com/tutorials/threads/yield.shtml
Threads: http://www.slideshare.net/joaosavio/captulo-9threads-presentation
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

129

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com

130

Potrebbero piacerti anche