TestKiller, duvida nessa questão

9 respostas
D

Se alguem quiser responder e explicar porque da resposta ficarei muito grato.

public class Threads1 {
	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 Threads1().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,

EDIT - Eu dei uma reformatadinha no seu código. De fato, uma questão semelhante a essa caiu na minha prova de certificação, portanto é bom não bobear como responder essa questão.

9 Respostas

ivo_costa

Vc tem certeza que é realmente isso?

Se sim:

*oq significa as interrogações na linha 8?
*na linha 2 o certo seria “int x=0” ao invés de “intx=0”
*na linha 6 o certo seria “int i=0” ao invés de “int=i=0”
*na linha 1 não se poder criar uma classe em java com espaços

Tlvz tenha mais coisa mas foi oq eu consegui ver por enquanto.

D

ivo costa:
Vc tem certeza que é realmente isso?

Se sim:

*oq significa as interrogações na linha 8?
*na linha 2 o certo seria “int x=0” ao invés de “intx=0”
*na linha 6 o certo seria “int i=0” ao invés de “int=i=0”
*na linha 1 não se poder criar uma classe em java com espaços

Tlvz tenha mais coisa mas foi oq eu consegui ver por enquanto.

Como copiei do testkiller, veio com alguns erros, já corrigi. Mas e sobre a resposta?

T

Compile o código, rode algumas vezes, e tire suas conclusões. Que tal?

ivo_costa

Esse código não compila.
os erros dos ints e do nome da classe da pra arrumar, mas as interrogações eu nem faço idéia do que pode ser.

D

Compile o código, rode algumas vezes, e tire suas conclusões. Que tal?

Muito obrigado, isso me ajudo muito.

Eu já sei as respostas corretas, mas não sei pq das respostas.
Vou deixar um pouco mais claro minha duvida. Talvez assim alguem possa esclarecer.

A resposta “D” e “E” estão erradas pois cada Thread so vai emprimir 4 valores. Com isso elas são eliminadas.
A resposta “C” está correta pois os valores são impresso de 2 em 2, em ordem crescente. (Eu acredito que sja isso)
Minha Duvida é entre a “A” e a “B”

ivo_costa

Agora sim resposta:

A e C;

Pra imprimir na sequencia C:

A primeira thread recebeu o processador e executou todo o laço for nesse tempo imprime(0,2,4,6,).
A segunda thread recebeu o processador e executou todo o laço for nesse tempo imprime (8,10,12,14).

Sequencia A:

A primeira thread recebeu o processador e executou até a linha 8 no terceiro laço
Memória da thread 1:
i = 2
current = 4

A segunda thread recebeu o processador e executou todo o laço for, o x ainda está valendo 4 pq a thread 1 não conseguiu executar a linha que aumenta o valor de x (linha 9), então imprime (4,6,8,10,).

A primeira thread recebe o processador de volta e executa a linha 9, x = 4 + 2, então imprime o último número (6,)

Se vc entender isso ae encima vai entender que a resposta B não poderia acontecer.

D

ivo costa:
Agora sim resposta:

A e C;

Pra imprimir na sequencia C:

A primeira thread recebeu o processador e executou todo o laço for nesse tempo imprime(0,2,4,6,).
A segunda thread recebeu o processador e executou todo o laço for nesse tempo imprime (8,10,12,14).

Sequencia A:

A primeira thread recebeu o processador e executou até a linha 8 no terceiro laço
Memória da thread 1:
i = 2
current = 4

A segunda thread recebeu o processador e executou todo o laço for, o x ainda está valendo 4 pq a thread 1 não conseguiu executar a linha que aumenta o valor de x (linha 9), então imprime (4,6,8,10,).

A primeira thread recebe o processador de volta e executa a linha 9, x = 4 + 2, então imprime o último número (6,)

Se vc entender isso ae encima vai entender que a resposta B não poderia acontecer.

Valew, agora eu entendi. Eu não estava entendendo como que os numeros diminuiam no final. Mas com essa sua explicação ficou tudo mais claro.

Obrigado :lol: :lol:

OliveirakunJava

Olá pessoal, tb estou estudanodo pra scjp e queria pedir para alguém mandar o testkiller pra mim por favor.
meu e-mail é:[email removido]
Obrigado!!

D

Já te enviei o testkiller, bons estudos :smiley: :smiley:

Criado 27 de maio de 2008
Ultima resposta 1 de jun. de 2008
Respostas 9
Participantes 4