<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Double-checked locking: pra que?!"]]></title>
		<link>http://www.guj.com.br/posts/list/12.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Double-checked locking: pra que?!"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Double-checked locking: pra que?!</title>
				<description><![CDATA[ Estive lendo um [url=http://www.javaworld.com/javaworld/jw-04-2003/jw-0425-designpatterns.html?]artigo da JavaWord sobre Singleton[/url] e fiquei com a seguinte duvida:<br /> <br /> Pra que serve o Double-checked locking?! Alguem usa mesmo isso? A meu ver não há nenhuma vantagem sobre sincronizar todo o metodo assim:<br /> [code]<br /> public static synchronized Singleton getInstance&#40;&#41; &#123;<br /> 	if&#40;singleton == null&#41; &#123;<br /> 		singleton = new Singleton&#40;&#41;;<br /> 	&#125;<br /> 	return singleton;<br /> &#125;<br /> [/code]<br /> <br /> Que é como geralmente faço. E mais, se eu não usar lazy instantiation para criar o singleton, ou seja, se eu o criar quando a classe é carregada, parece-me que double-checked locking fica mais inutil ainda. Então, alguem pode me explicar se (e quando) se deve usar essa tecnica?<br /> <br /> Até.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25809/double-checked-locking-pra-que
</guid>
				<link>http://www.guj.com.br/prepost/5256/25809/double-checked-locking-pra-que
</link>
				<pubDate><![CDATA[Thu, 11 Sep 2003 22:15:04]]> GMT</pubDate>
				<author><![CDATA[ cancao]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Cara isso pode dar pau...evite ao máximo sincronizar...<br />  Pq vc não cria um bloco estático para inicializar o seu <br />  Singleton...é menos custoso.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25810/
</guid>
				<link>http://www.guj.com.br/prepost/5256/25810/
</link>
				<pubDate><![CDATA[Thu, 11 Sep 2003 22:27:10]]> GMT</pubDate>
				<author><![CDATA[ Ironlynx]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ class Singleton{ <br />   <br />    private static Singleton instance; <br /> <br />    static { //inicializa o Singleton<br />           instance = new Singleton(); <br />    } <br />     <br />    private Singleton() { <br />    } <br /> <br />    public static Singleton getInstance(){ <br />           return instance; <br />    } <br /> }<br /> <br /> Só sincronizo os métodos(qdo forem necessários)]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25811/
</guid>
				<link>http://www.guj.com.br/prepost/5256/25811/
</link>
				<pubDate><![CDATA[Thu, 11 Sep 2003 22:36:20]]> GMT</pubDate>
				<author><![CDATA[ Ironlynx]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ <a class="snap_shots" href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html" target="_blank" rel="nofollow">http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html</a><br />  tem um post sobre DoubleCheckedLocking aqui no Guj...dá uma <br />  pesquisada.Honestamente,não vejo muitas vantagens....<br />  pow,se vc não sincronizar vc pode ter 2 instancias dele,e,<br />  sincronizando tem problemas críticos de concorrência...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25813/
</guid>
				<link>http://www.guj.com.br/prepost/5256/25813/
</link>
				<pubDate><![CDATA[Thu, 11 Sep 2003 22:50:18]]> GMT</pubDate>
				<author><![CDATA[ Ironlynx]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ DoubleChecked locking era um truque para se ter lazy initialization a um custo muito baixo em um ambiente muiti-threaded. Isso, porem, dificilmente funciona com as cpu's modernas sem um certo esforço.<br /> <br /> A situação é mais grave pelo fato do java não possuir primitivas de memory e code barriers. Ou seja, double-checked locking em java é 1 grande armadilha.<br /> <br /> No java, a única solução de sincronização que funciona são os monitores, nada alem disso vai funcionar, não ao menos sem possuir um custo maior que o dos próprios monitores.<br /> <br /> Isso se deve ao fato de java não te dar acesso a alguns recursos indispensaveis para se criar primitivas de sincronização rápida em user space; alguns exemplos são intruções atomicas de teste-operação  (test-and-set e test-and-complement são algumas disponiveis em pc's) ou troca atomica registrador-memoria, não temos um increment, não tem suporte a code ou memory barriers ou ainda ter permitir alinhar um objeto na memoria de acordo com as cache-lines de uma cpu.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25820/
</guid>
				<link>http://www.guj.com.br/prepost/5256/25820/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 00:45:02]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ teremos barreiras no java1.5esse codigo que voce postou, syncing o codigo inteiro, funciona perfeitamente.<br /> <br /> o que nao resolveria seria sincronizar apenas o lazy init.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25840/
</guid>
				<link>http://www.guj.com.br/prepost/5256/25840/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 09:27:52]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Paulo, eu acho que voce ta confundindo a primitiva de sincronização barrier, com code e memory barriers,  que são artificios, normalmente instruções, para garantir de forma precisa o comportamento de 1 pedaço de código. Voce se refereria ao java.concurency ne? <br /> <br /> <br /> Code barriers possuem 2 tipos de garantia, uma o compilador não vai fazer scheduling de instruções ou otimizações atravez da barreira (blocos volatile asm no gcc); outra garante ordem de execução de instruções pelo processador, todas instruçoes que vem antes da barreira são retired antes, todas que vem depois são retired depois (a instrução 'cpuid' dos pc's).<br /> <br /> Memory barriers impoem ordenação no acesso de memoria, ou seja, uma write-barrier, impõe que todas operações de escrita devem ser completas antes da barreira ser antingida; o mesmo vale para read-barriers.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/25859/
</guid>
				<link>http://www.guj.com.br/prepost/5256/25859/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 11:13:59]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ isso<br /> tava falando do java.util.concurrent<br /> <br /> mas falaram que agora, arrumando o modelo teorico de memoria do java, e tendo as barriers no concurrent, da para fazer o lazy init soh syncing o lazy init e tal.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26000/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26000/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 19:20:25]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Paulo, eu olhei o javadoc do ultimo draft do JSR 166, e nele não existe nenhuma referencia a barreiras. Existem as variaveis atomicas, que te permitem implementar thin-locks com busy-wait, mas memory barriers não achei 1 unica referencia se quer, que seria necessario para implementar lazy-init de forma segura.<br /> <br /> Porem não cheguei a ver quais alterações tão sendo feitas no modelo de memoria do java.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26012/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26012/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 22:08:43]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Desculpe atrapalhar a masturbação mental de vcs, Paulo e louds, mas... posso fazer uma pergunta um pouco mais chata, antes? <img src="http://www.guj.com.br/images/smilies/97ada74b88049a6d50a6ed40898a03d7.gif" border="0"><br /> <br /> Qual a utilidade de um singleton, hoje em dia?<br /> <br /> [quote] I've yet to see a compelling example of a non-system level case where a singleton was actually required. Normally the real need is simply for cached instance that is easily locatable. The application doesn't actually REQUIRE that only one instance be created. Instead, it simply only wants one instance and using the singleton pattern provides an easy way to do the cached lookup. Most of the time, it doesn't matter (performance and memory issues aside) if multiple instances of the object existed. It's just that the static getInstance() is so easy. And hey, look it's a "Design Pattern", so it must be right.[/quote]<br /> <br /> <a class="snap_shots" href="http://members.capmac.org/~orb/blog.cgi/tech/coding/no_singletons.html" target="_blank" rel="nofollow">http://members.capmac.org/~orb/blog.cgi/tech/coding/no_singletons.html</a><br /> <br /> Desculpa estragar a festa <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26014/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26014/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 22:30:25]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Sei nao.. eh mais um desses casos onde um cara nao gosta de determinada coisa e fica procurando motivo pra convencer o resto do pessoal a nao usar. Dae sempre aparece alguem com "100 motivos para usar X", e logo em seguida tem outro postando "200 motivos para nao usar X" e assim vai.. <br /> <br /> Eh meio phoda isso.. voce ( "voce" nesse caso nao eh ninguem aqui em especial, apenas o sujeito ) acha determinada funcionalidade ruim, e o teu colega acha legal.. eh soh perda de tempo tentar forcar a outra pessoa a deixar de usar simplesmente porque voce nao gosta.. mesmo que de todos os pontos do mundo, se nao mostrar com fatos e de uma maneira explicativa e nao-agressiva, a pessoa nunca ira aceitar o seu ponto de vista, entrando em uma discussao ideologica inutil.<br /> <br /> Eu uso Singletons para casos onde nao ha fundamento em processar a mesma coisa sempre de novo ( como arquivos de I18n, por exemplo ).. chamo de Singleton porque tudo mundo chama, mas no fundo, to nem ai para o nome.. se a funcionalidade atende os meus requisitos, perfeito, e dane-se o resto. <br /> Deixar de usar alguma coisa ou fazer de outra maneira soh porque "eh conceitualmente errado" eh besteira... Mas nao me interpretem mal: nao estou dizendo que fazer da * maneira* errada eh algo que tenha o meu apoio, mas sim que se for algo puramente conceitural - como esse monte de regras de OO - prefiro fazer da maneira que funcione melhor e que atenda aos requisitos, do que fazer apenas para deixar algumas pessoas felizes... <br /> <br /> Rafael]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26022/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26022/
</link>
				<pubDate><![CDATA[Fri, 12 Sep 2003 23:51:24]]> GMT</pubDate>
				<author><![CDATA[ Rafael Steil]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Ae onde têm material falando que vão colocar barreiras no java 1.5?<br /> Paulo passa um link, qq coisa!!!<br /> <br /> Abraços]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26040/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26040/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 08:36:59]]> GMT</pubDate>
				<author><![CDATA[ duardor]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Aeeee, concordo com todo mundo!! <br /> <br /> Nem sempre isso acontece... primeiro o fácil:<br /> duardor, bota "util.concurrent" no google e acha a página do Doug Lea. Esse pacote vai entrar no java 1.5<br /> <br /> Segundo, os singletons. tem um cara aqui na empresa que é louco por patterns, e a gente briga sempre pq o primeiro site que ele vai buscar teoria é o TheServerSide, e depois o da Sun. Eu busco teoria no Wiki do C2.<br /> <br /> Entao eu venho com essas idéias de Yagni, OnceAndOnlyOnce, e bla bla bla, e ele me mostra um exemplo de "Factory pra usar DAOs como ValueObjects", que era exatamente o que a gente estava implementando.<br /> <br /> E a gente comecou a discutir pq eu queria que o objeto tivesse IoC (e por isso ia precisar de um construtor [b]com[/b] argumentos), e a Factory da Sun obrigava os objetos a terem construtores vazios.<br /> <br /> Logicamente, como eu implementei o objeto, eu botei o argumento e falei "se vira", e a factory agora contém o código pra inicializar o argumento, em vez de [b]eu[/b] ter que fazer isso no meu construtor.<br /> <br /> Discussoes como essa sempre aparecem relacionadas a Singletons e padroes para os quais existe um "exemplo" da Sun. (ou seja, todos).<br /> <br /> O que eles vao mudar no modelo teorico de memoria pra 1.5??<br /> <br /> Aquelao!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26050/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26050/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 11:22:57]]> GMT</pubDate>
				<author><![CDATA[ dukejeffrie]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ [quote="Rafael Steil"]Eu uso Singletons para casos onde nao ha fundamento em processar a mesma coisa sempre de novo ( como arquivos de I18n, por exemplo ).. chamo de Singleton porque tudo mundo chama, mas no fundo, to nem ai para o nome.. se a funcionalidade atende os meus requisitos, perfeito, e dane-se o resto. [/quote]<br /> <br /> Hmmm... vc nunca tentou testar um singleton né? <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Pra isso que vc usa Singletons (arquivos i18n, no exemplo que vc citou), um método estático tava mais do que bom...e, se vc for olhar bem, pra grande maioria das coisas onde se usaria um singleton, um 'static' bem colocado já resolveria o problema muito bem.<br /> <br /> Eu concordo com vc - briguinhas do tipo "X nao presta", "X presta", "nao presta não!", "presta sim!" são meio babacas. Mas, se vc pensar bem, é nesse tipo de discussão que a gente tira as melhores idéias. Se X não presta, como a gente pode melhorar? Quais são as alternativas? E por aí vai. Eu não queria começar uma discussão besta com o meu post - eu queria uma discussão sobre as alternativas aos Singletons, que em muitos casos (*cough* i18n *cough*) são utilizados indevidamente.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26057/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26057/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 12:46:02]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ pior é que é verdade<br /> <br /> tipo, eu utilizava um Singleton para por exemplo, um objeto de acesso ao hibernate, mas era por falta de conhecimento, depois que resolvi ler a docume'ntação e descobri que o session do hibernate não era thread safe, acabei transformando os Singletons neste caso, em factories ou multitons<br /> <br /> para i18n, normalmente utilizo um ResourceBundle normalmente, nem estatico é, e nunca tive problemas com alocação de memoria por causa disto <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0"><br /> <br /> nunca tinha pensado desta maneira, mas este artigo com certeza me fez pensar <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26058/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26058/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 13:04:42]]> GMT</pubDate>
				<author><![CDATA[ urubatan]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Voce esta julgando as coisas sem conhecer o codigo usado. Claro que muitas vezes um static xxx meuMetodo da pro gasto, mas E DAI se eu quiesse colocar um getInstance()? <br /> Por exemplo, o metodo para pegar determinada mensagem eh estatico, mas o metodo para dar reload no arquivo .properties nao. Por que? eu simplesmente quis fazer assim, meter static em tudo nao me agradava, entao criei uma instancia privada para ter acesso as partes nao-static. <br /> <br /> Como disse na outra mensagem, se chegar pro codigo do cara e dizer "AARGGHH, isso aqui nao tem nada a ver, tinha que ter usado tudo static" soh vai deixar a pessoa humilhada e constrangida. <br /> <br /> Rafael]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26059/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26059/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 13:05:26]]> GMT</pubDate>
				<author><![CDATA[ Rafael Steil]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ [quote="Rafael Steil"]Voce esta julgando as coisas sem conhecer o codigo usado. Claro que muitas vezes um static xxx meuMetodo da pro gasto, mas E DAI se eu quiesse colocar um getInstance()?[/quote]<br /> <br /> Rafael, [b]CALMA[/b]. <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> Eu não estou tentando te atacar ou julgar. Estou tentando levantar uma discussão construtiva sobre o uso (especificamente, o mal-uso) de singletons. Não leve o que eu estou escrevendo tão a sério, ou como uma afronta pessoal - de forma alguma é a minha intenção.<br /> <br /> [quote="Rafael Steil"]Como disse na outra mensagem, se chegar pro codigo do cara e dizer "AARGGHH, isso aqui nao tem nada a ver, tinha que ter usado tudo static" soh vai deixar a pessoa humilhada e constrangida.[/quote]<br /> <br /> Eu lasco esses "AAAAAARGH"s bem frequentemente, apesar de - eu acho - ser um pouco mais discreto <img src="http://www.guj.com.br/images/smilies/283a16da79f3aa23fe1025c96295f04f.gif" border="0"><br /> <br /> O curioso é que, ao invés de olhares humilhados e constrangidos, geralmente eu sou recebido com um "mas pq?", que geralmente são bem mais construtivos, e geram uma discussão bastante interessante <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26062/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26062/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 13:31:31]]> GMT</pubDate>
				<author><![CDATA[ cv]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Bom, dos artigos recomendados, a citação que mais me chamou atenção foi...<br /> [quote]<br /> If the class maintains no state, and you cannot conceive of it maintaining state in the future, it's static. Otherwise it's a Singleton.<br /> [/quote]<br /> <br /> ... encontrada [url=http://www.magpiebrain.com/archives/000084.html]nesse artigo[/url] e que acessei atraves [url=http://members.capmac.org/~orb/blog.cgi/tech/coding/no_singletons.html]desse outro[/url]. Não uso singletons a todo momento, mas, em alguns casos parece-me ser a alternativa mais interessante, por exemplo, um pool de conexões. Não dá pra ficar criando o pool a todo instante. Entretanto, ao que parece, a alternativa sugerida seria colocar o pool como um atributo estatico em algum canto, é isso? Algo como:<br /> <br /> [code]<br /> public class ClasseQualquer &#123;<br /> 	public static Pool pool = new Pool&#40;&#41;;<br /> 	...	<br /> &#125;<br /> [/code]<br /> <br /> Era mesmo isso? Se for, não vejo qual a vantagem. Já que eu poderia fazer o singleton assim:<br /> <br /> [code]<br /> public class Pool &#123;<br /> 	private static Pool pool = new Pool&#40;&#41;;<br /> 	...	<br /> 	public static Pool getInstance&#40;&#41; &#123;<br /> 			return pool;<br /> 	&#125;<br /> &#125;<br /> [/code]<br /> <br /> Sobre o overhead que terei quando sincronizar o getInstance, li [url=http://www-106.ibm.com/developerworks/java/library/j-jtp04223.html?ca=dgr-lnxw01JavaUrbanLegends]nesse artigo[/url], recomendado [url=http://www.guj.com.br/forum/viewtopic.php?t=3845]nesse post[/url], que o custo da sincronização nas jvms mais modernas não é tão grande assim. É claro, se eu tiver uma quantidade muito grande de threads acessando o getInstance, um pequeno overhead pode se transformar numa grande espera. Mas, acho que dá pra continuar usando o singleton se eu não usar lazy initiation como no exemplo acima ou eu posso rever algumas coisas e transformar o singleton numa factory, acho. :? <br /> <br /> Até.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26085/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26085/
</link>
				<pubDate><![CDATA[Sat, 13 Sep 2003 17:50:05]]> GMT</pubDate>
				<author><![CDATA[ cancao]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Eu também solto esses AAAARGH, e nem sempre o pessoal gosta. Quando eles aprendem que nao é com eles, e que geralmente eu faco AARGH quando vejo um código igualzinho ao que eu mesmo um dia escrevi e me deu tanto trabalho depois, eles páram de se ofender. Mas de uns tempos pra cá, tenho tomado mais cuidado.<br /> <br /> Muito código que eu geralmente critico eu mesmo já escrevi igual um dia. Outras vezes, é coisa que eu nunca vi, e nunca tive a inspiracao para fazer assim. Nesses casos, quando o outro cara é bom na discussao, eu aprendo alguma coisa.<br /> <br /> Meus AAARGHs geralmente promovem melhor software, ou pq o cara aprende alguma coisa, ou pq eu aprendo alguma coisa. Nunca, mas nunca mesmo, eu avalio um programador pelo código que ele escreve, mas pelo quanto ele é capaz de defendê-lo (nos pontos bons) e aprimorá-lo (nos pontos ruins) numa discussao. Pq eu preciso confiar no código dele, e ele no meu.<br /> <br /> Eu chamo de singleton uma instância única. Mas essa instancia tem que ser acessada de alguma forma, e nem sempre a melhor forma é um método estático na classe, com construtor privado. Eu penso em componentes, e sei que um dia vou poder precisar de mais de uma daquela instância. Hoje que eu aprendi IoC eu posso fazer assim:<br /> <br /> [code]<br /> public class Application &#123;<br />    public Application&#40;MeuExSingleton instancia&#41; &#123;<br />       ...<br />    &#125;<br />    ...<br />    public static void main&#40;String args&#91;&#93;&#41; &#123;<br />       MeuExSingleton mes = new MeuExSingleton&#40;&#41;;<br />       Application app = new Application&#40;mes&#41;;<br />       app.start&#40;&#41;;<br />    &#125;<br /> &#125;<br /> [/code]<br /> <br /> Aquelao!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26189/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26189/
</link>
				<pubDate><![CDATA[Mon, 15 Sep 2003 09:28:25]]> GMT</pubDate>
				<author><![CDATA[ dukejeffrie]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ eu tambem prefiro sempre singleton. A sun ja cagou pra caramba em fazer a System e a Math tudo estatico. Se a math fosse um singleton, a gente poderia fazer Math.getMath("normal") ou Math.getMath("strictl") por exemplo. Pois hoje em dia a gente tem de trocar tudo que eh Math para StrictMath. Pessimo.<br /> <br /> Mas a definicao que o cancao deu eh otima. use singleton se a classe possui um estado. Essa regra deve ser sempre obedecida. E mesmo se ela nao valer (caso da math), as vezes tambem eh interessante usar singleton.<br /> <br /> louds, achei a url que tem a cyclic barrier, ve se eh o q eu tava falando:<br /> <a class="snap_shots" href="http://gee.cs.oswego.edu/dl/concurrent/dist/docs/index.html" target="_blank" rel="nofollow">http://gee.cs.oswego.edu/dl/concurrent/dist/docs/index.html</a>]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26216/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26216/
</link>
				<pubDate><![CDATA[Mon, 15 Sep 2003 11:08:49]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ Então Paulo, como já tinha falado, voce confundiu a primitiva de sincronização barrier com oque vem a ser uma 'memory-barrier'.<br /> <br /> Um barrier simplesmente bloqueam todas threads nela ate um condição ser atingida, depois não bloqueia mais.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26274/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26274/
</link>
				<pubDate><![CDATA[Mon, 15 Sep 2003 15:58:31]]> GMT</pubDate>
				<author><![CDATA[ louds]]></author>
			</item>
			<item>
				<title></title>
				<description><![CDATA[ [quote="louds"]<br /> <br /> Um barrier simplesmente bloqueam todas threads nela ate um condição ser atingida, depois não bloqueia mais.[/quote]<br /> <br /> essa ai eh a primtiva de sincronizacao? memory barrier faz o que?]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/prepost/5256/26276/
</guid>
				<link>http://www.guj.com.br/prepost/5256/26276/
</link>
				<pubDate><![CDATA[Mon, 15 Sep 2003 16:11:51]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
	</channel>
</rss>
