Threads

7 respostas
antonioedirane
Na questão abaixo não entendi porque na questão abaixo, a resposta B está errada.
public class Threads5 {
	int x = 0;

	public class Runner implements Runnable {
		public void run() {
			int current = 0;
			for (int i = 0; i < 4; i++) {
				current = x;
				System.out.print(current + ", ");
				x = current + 2;
			}
		}
	}

	public static void main(String[] args) {
		new Threads5().go();
	}

	public void go() {
		Runnable r1 = new Runner();
		new Thread(r1).start();
		new Thread(r1).start();
	}
}
Which two are possible results? (Choose two.) A. 0, 2, 4, 4, 6, 8, 10, 6, B. 0, 2, 4, 6, 8, 10, 2, 4, C. 0, 2, 4, 6, 8, 10, 12, 14, D. 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, E. 0, 2, 4, 6, 8, 10, 12, 14, 0, 2, 4, 6, 8, 10, 12, 14, Resposta certa A e C Meu pensamento: O for roda 4 vezes em cada thread dando um total de 8 números impressos. Isso me deixa 3 opções ABC, Porque a resposta B não esta certa ?

7 Respostas

Lavieri

os numeros nunca poderiam voltar… pois o counter é sempre acrescido de 2… independente da thread… no maximo pode haver repetições, duplicadas, quando um thread esta passando por um valor, enquanto a outra tb esta… ai as 2 imprimem iguais… porem depois segue-se normal subindo os valores

seria impossivel o seuginte

digamos que a primera thread fizesse…
0, 2,

ai a seugnda segurava o 2, mais não imprimia

a primeira continuaria 4, 6, ai acabou o loop… agora a 1° thread iria ter q imprir o 2… e não poderia ter outra opção… então o 8 e o 10 acontecendo… o numero seguinte n poderia ser 2

0, 2, 4, 6, 8, 10, 2, 4,


pq a A pode ?

0, 2, 4, 4, 6, 8, 10, 6,

[color=darkred]1° thread pega … 0
1° thread IMPRIME … 0 … 1°
1° thread pega … 2
1° thread IMPRIME … 2 … 2°
1° thread pega … 4[/color]

[color=darkblue]2° thread pega … 4[/color]
[color=darkred]1° thread IMPRIME … 4; … 3°[/color]
[color=darkblue]2° thread IMPRIME … 4; … 1°[/color]
[color=darkred]1° thread pega … 6[/color]
[color=darkblue]2° thread pega … 6
2° thread IMPRIME … 6; … 2°
2° thread pega … 8
2° thread IMPRIME … 8; … 3°
2° thread pega … 10
2° thread IMPRIME … 10; … 4°[/color]

[color=darkred]1° thread IMPRIME … 6; … 4°[/color]

a letra C existem muitas possiblidades de acontecer… uma é a1° thread executar toda sozinha, depois a 2°

deyvid

MAs Lavieri,

Esse comportamento não guarantido! ou não entendi sua resposta

anurb.coimbra

Esta questão é identica a uma que caiu na minha prova. Onde vc a encontrou?

B

deyvid:
MAs Lavieri,

Esse comportamento não guarantido! ou não entendi sua resposta

Não é garantido, mas após a variável “x” ser incrementada, por qualquer uma das threads, o valor de current não pode ser menor do que o de “x” após este último incremento, visto que a variável “x” tem o mesmo valor para ambas as threads…Mas lembre-se de considerar a ordem q estes resultado serão impressos.

Lavieri

deyvid:
MAs Lavieri,

Esse comportamento não guarantido! ou não entendi sua resposta

logico que não é garatido… a pergunta é

Which two are possible results? (Choose two.)

Escolha 2 possibilidade de resultados…

mostrei como a A é possivel… a letra C é bem facil de ver que é possivel de acontecer…


e anteriormente expliquei como a B é impossivel…

o problema da B é que … "0, 2, 4, 6, 8, 10, 2, 4, " … como são os 2 ultimos resultados…

ou as 2 threads ja fizeram 3 resultados e faltam 1 para cada thread… e para sairem resultados menores q o anterior o valor current teria que retroceder, o que é impossivel…

ou 1 thread ja fez 4 resultados, e a segunda thread ja fez 2 … ai a segunda thread teria tb que retroceder… tornando impossivel de ocorrer esse resultado

antonioedirane

No Testkiller

anurb.coimbra

antonioedirane:
No Testkiller

Interessante. Quando fiz a prova não estudei por ele, só li o livro da Kathy Sierra, fiz os exercícios do livro e o simulado.

Criado 19 de maio de 2009
Ultima resposta 20 de mai. de 2009
Respostas 7
Participantes 5