"
Threads em SCJP
10 Respostas
Difícil saber exatamente o peso, acredito que as questões sejam aleatórias, podendo ou não cair mais de threads…
Quando se diz que “pesa” mais, talvez seja porque threads não são muito utlizadas no dia a dia ou no trabalho, sendo incomum praticar sempre o desenvolvimento com threads.
Se você sentiu dificuldade nesses tópicos, vale a pena revisá-los antes de ir fazer a prova! Serialização e Threads se tornam simples à partir do momento que você codifica alguns programas para analisar a diferença entre eles. No caso de serialização, tudo se complica quando a classe mãe não implementa a interface Serializable, pois o construtor será chamado.
olá…
aproveitando o topico do amigo…
parece q Thread continua sendo o pesadelo segundo amigo meu q fez a prova scjp 6 a poucos dias… eu fico em duvida se oq tem no livro da Katty eo sufuciente pra passar nesse topico…
portanto queria saber se alguem conhece algum tutorial que explique melhor esse “pesadelo” de Thread XD
flw…
A maioria dos candidatos diz que tem dificuldades em Threads e que é aí que perdem mais pontos. Mas não posso dizer muito porque sou uma exceção: Gabaritei Threads mas fiz só 72% em OO.
Boas partes das pegadinhas de Threads tem a ver com condições de corrida e deadlocks. Para achar condições de corrida, tente procurar qual que é o pior ponto possível para uma Thread ser interrompida e enquanto ela está parada alguma variável de valor crítico mudar, lembrando que as operações provavelmente não são atômicas. por exemplo:
class Foo {
private int x;
void kk() {
if (x == x) {
System.out.println("a");
} else {
System.out.println("b");
}
}
}
Por exemplo, embora seja extremamente improvável que este código imprima “b”, isso pode acontecer se a Thread for interrompida na metade da avaliação da condição do if e o atributo x mudar enquanto isso. Basta procurar o pior ponto possível para a Thread ser interrompida.
Outra coisa importante, é entender o synchronized direitinho. Basta vê-lo como uma “reserva”:
synchronized (foo) {
// blabla
}
A Thread, para entrar no bloco synchronized tem que ser a “dona” de foo. Cada objeto só tem um único dono por vez. Quando a Thread vai entrar no bloco synchronized e alguma outra já é dona do objeto foo, a Thread pára até que a dona do foo o largue. Se tiver 50 threads esperando para entrar no synchronized, e a dona do foo o largar, qualquer uma das threads que estiverem esperando pode ser premiada e receber a posse do foo (ou seja, elas não fazem fila, sai no sorteio).
Métodos synchronized são synthatic sugar apenas:
public synchronized void x() {...}É o mesmo quepublic void x() {
synchronized (this) {...}
}Epublic synchronized static void x() {...}É o mesmo quepublic static void x() {
synchronized (EstaClasse.class) {...}
}
Aprendendo isso, sem nenhuma dúvida, você pode ir dar uma olhada em wait, notify e notifyAll.
eu tb estou estudando, comprei o livro da kathy um pouco depois do voucher nessa ultima promoção da sun… terminei as perguntas de thread hoje no trem… até que não achei tão dificil assim…
threads tem certa fama de quebrar o pessoal, eu tive mais dificuldade mesmo no capitulo de generics (que só uso arraylist no dia a dia), e no capitulo que tem IO, serialização, datas e internacionalização, que ao menos os ultimos requisitos eu uso pouco tb…
uma dica para ver no q q o pessoal se ferra mais é pesquisando isso aqui no forum, quando o pessoal cria esses tópicos eles costumam colocar os scores… mais eu ainda acho que isso varia de pessoa pra pessoa…
valeu victorwss otima explicação ^^
todo mundo fala q thread e o terror… mas todo simulado q faço, vejo que não cai tanta pergunta assim sobre thread… por isso fico meio assim… ate mesmo nos tutorial e no livro da katty não parece ser tão sinistro assim…
se ficar so nisso da pra levar legal XD
mais gostei… se alguem mais quiser esclarecer um pouco mias sobre thread e quais as pegadinhas do exame ficaria feliz ^^
vlw t+
Poisé, fiz 100% em Threads, e 70% em Generics. O resto foi entre 90% e 100%. 
No meu caso, eu recomendaria estudar Generics! hahaha!
Cara, tem mais de um ano que eu fiz a prova e lembro pouca coisa das pegadinhas. Expremi bastante o meu cérebro e consegui tirar isso:
-
A maior parte das perguntas de Thread pedem para você dizer quais são as possíveis respostas que um programa com duas ou três Threads pode fornecer. Esse tipo de questão, eu recomendo tentar resolver “de trás para frente”: Pegue uma alternativa e a analise. Em que pontos as threads poderiam ser interrompidas para resultar naquela saída? Se não houver nenhum conjunto de pontos possíveis, então a alternativa é falsa. Mas olhe duas vezes isso para ter certeza.
-
Algumas perguntas que envolvem Threads pedem para você dizer qual que é a saída (uma só alternativa). Normalmente não é possível determinar-se a saída (ou seja vai ter uma alternativa dizendo que não dá para se saber). MAS, em alguns casos, apesar de haver várias Threads, o resultado acaba sendo sempre o mesmo, portanto é importante prestar atenção. Há algumas que pode simplesmente não compilar.
-
Há algumas questões que podem pedir acerca da possibilidade de ocorrer deadlock. Aí você tem que ser pessimista e procurar o pior caso possível: quais monitores cada Thread pode obter de tal forme que elas entrem em deadlock?
E também:
4. Espere pegadinhas acerca de notify() versus notifyAll().
5. Pegadinhas relativas a Thread.run() versus Thread.start().
6. Preste atenção a coisas como wait(), notify() ou notifyAll() fora de blocos synchronized (isso dá IllegalMonitorStateException).
7. Você vai ter um NullPointerException se usar uma variável com valor null no bloco synchronized.
8. Preste atenção a chamar wait(), notify() ou notifyAll() no objeto errado. Por exemplo:
synchronized (foo) {
bar.wait(); // Olha o IllegalMonitorStateException aí!
// ou então:
wait(); // Isso é igual a this.wait() // MUITO CUIDADO COM ISSO!
}
9. É possível se ter confusão entre Thread.sleep e Thread.wait (que na verdade trata-se de Object.wait).
10. Preste atenção em wait() sem notify() nem notifyAll().
11. Preste atenção em notify() ou notifyAll() sem wait().
12. Pegadinhas do tipo “criar uma subclasse Foobar de Thread, sobrescrever o método run(), e instanciar Foobar passando um Runnable”.
13. Se você ver uma instância de Runnable, ou alguma subclasse de Thread, preste atenção na assinatura do método run(). Não deve haver nenhum parâmetro!
14. Atenção se houver um wait() dentro de um bloco synchronized aninhado em outro bloco synchronized.
15. Muita atenção com a possibilidade de que o notify() aconteça antes do wait(). Isso é um tipo de pegadinha difícil de perceber, que envolve vários conceitos de Threads de uma só vez ao mesmo tempo (condição de corrida, deadlock e wait+notify)!
16. Eu lembro de ter aparecido pelo menos uma questão com algo acerca de Thread.yield(). Mas realmente não lembro o que era. Thread.join() também caiu.
Friso bastante atenção em wait, notify e notifyAll porque essas são as questões mais difíceis do tópico Threads, e também um dos tópicos menos entendidos pelos candidatos. Também digo para não confiarem em Thread.sleep. Se duas threads saem ao mesmo tempo em uma corrida, mas uma delas pára em um Thraed.sleep(50000), isso não significa que você pode confiar de que a outra Thread já terá terminado.
pow… era disso q eu estava falando…
valeu cara… brigadaum ajudou bastante 
e meu realmente não e facil… e muito conceito e varias pegadinhas diferentes =(
mais a prova inteira e assim mesmo… kkkk
mais uma vez agradeço a ajuda e que este topico fique de ajuda para outras pessoas q tenham a mema duvida q eu tive…
abs.
Jeferson
threads e serializacao foram os assuntos mais facil que achei no exame, vc tem está ligado nas regras de threads e analisar a questao, o exame que saber se vc sabe a regra de threads e segurar vc que com threads nada eh garantido… sempre ele vai estar testando isso… serializacao se nao me engano apareceu apenas 3 questoes bem bobas mais simples que aquelas do livro da kathy e threads foram 5 nao passou disso… o exame eh todo em cima de OO, fundamentos, exececoes, boa parte de API, generics tb isso ai que tem grande peso, o mais forte ainda eh OO.
ponto importante: leia o objetivo do exame na pagina da sun, a ideia certificar um cara fera em threads, mas q ele tenha conheicmento sobre, ate pq threads dar para fazer um livro sobre. E nao sei pq o pessoal tem tanto receio…
flw! e boa sorte!