Existem muitas maneiras de escrever singletons, e este exemplo é uma maneira de escrever singletons preguiçosos. O que deve ser observado em ambientes de alta concorrência:
1. Quando um singleton acessa simultaneamente e chama seu método GetInstance correspondente, também fará com que vários objetos de instância sejam criados e o bloqueio é necessário.
2. Usar sincronizado é uma solução melhor. A vantagem é que o código é conciso e a desvantagem é que a manutenção não pode ser manuseada e mantida ao jogar uma exceção; portanto, o sistema está em um bom estado.
3. As configurações de bloqueio exibidas são uma boa solução.
O código usando o bloqueio é o seguinte:
demonstração do pacote; importar java.util.concurrent.locks.lock; importar java.util.concurrent.locks.reentrantlock; / ** * Uso de referência * @author watson_xu * @date 2012-1-8 04:31:09 */ public Final Class SingletonContext {private static singletonContext sc = null; private singletonContext () {} bloqueio estático privado = new reentrantlock (); public static singletonContext getInstance () {if (sc == null) {Lock.lock (); if (sc == null) {tente {sc = new singletonContext (); } finalmente {Lock.unlock (); }} retornar sc; }}Ao usar sincronizado, o código é o seguinte:
demonstração do pacote; / ** * Referência para usar * @author watson_xu * @date 2012-1-8 04:31:09 */ public Final Class SingletonContext {private static singletonContext sc = null; private singletonContext () {} public static sincronizado singletonContext getInstance () {if (null == sc) {sc = new singletonContext (); } retornar new singletonContext (); }}Para ver mais sintaxe Java, você pode seguir: "Pensando no manual chinês Java", "Manual de Referência JDK 1.7 Versão Oficial em Inglês", "JDK 1.6 API Java Chinese Reference Manual", "JDK 1.5 API Java Chinese Reference Manual". Eu também espero que todos apoiem mais wulin.com.