Sunday, June 21, 2009
Hibernate Performance
Ótima apresentação do Emmanuel Bernard - co-autor de Hibernate Search in Action - mostrando algumas práticas e observações para escalar c/ Hibernate.
Marcadores:
Hibernate
Sunday, June 14, 2009
Concorrência - Iterar HashSet
Na sequência um exemplo de código que encapsula acesso a um HashSet de forma segura (nem tanto...):
O detalhe fica no método print, o compilador implicitamente cria código para navegar na coleção usando o Iterator, para realizar o print dos elementos.
Durante a iteração no elementos ninguém garante que uma outra thread acione o método addPalavra. Caso isso aconteça uma java.util.ConcurrentModificationException será lançada!
Para evitar isso o recomendado seria sincronizar a coleção, veja.
Interessante observação do livro Java Concurrency in Practice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class IteracaoVulneravel { private Set palavras = new HashSet(); public synchronized void removePalavra(String palavra) { palavras.remove(palavra); } public synchronized void addPalavra(String palavra) { palavras.add(palavra); } //pode lançar java.util.ConcurrentModificationException public void print() { System.out.println( "Palavras = " +palavras); } } |
O detalhe fica no método print, o compilador implicitamente cria código para navegar na coleção usando o Iterator, para realizar o print dos elementos.
Durante a iteração no elementos ninguém garante que uma outra thread acione o método addPalavra. Caso isso aconteça uma java.util.ConcurrentModificationException será lançada!
Para evitar isso o recomendado seria sincronizar a coleção, veja.
Interessante observação do livro Java Concurrency in Practice.
Subscribe to:
Posts (Atom)