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();
}
}
Threads
7 Respostas
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°
MAs Lavieri,
Esse comportamento não guarantido! ou não entendi sua resposta
Esta questão é identica a uma que caiu na minha prova. Onde vc a encontrou?
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.
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
No Testkiller
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.