<body><script type="text/javascript"> function setAttributeOnload(object, attribute, val) { if(window.addEventListener) { window.addEventListener('load', function(){ object[attribute] = val; }, false); } else { window.attachEvent('onload', function(){ object[attribute] = val; }); } } </script> <div id="navbar-iframe-container"></div> <script type="text/javascript" src="https://apis.google.com/js/platform.js"></script> <script type="text/javascript"> gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() { if (gapi.iframes && gapi.iframes.getContext) { gapi.iframes.getContext().openChild({ url: 'https://www.blogger.com/navbar.g?targetBlogID\x3d5078236\x26blogName\x3dSoloJava+Noticias\x26publishMode\x3dPUBLISH_MODE_BLOGSPOT\x26navbarType\x3dBLUE\x26layoutType\x3dCLASSIC\x26searchRoot\x3dhttps://solojava.blogspot.com/search\x26blogLocale\x3des_ES\x26v\x3d2\x26homepageUrl\x3dhttp://solojava.blogspot.com/\x26vt\x3d1431656211189939993', where: document.getElementById("navbar-iframe-container"), id: "navbar-iframe", messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER, messageHandlers: { 'blogger-ping': function() {} } }); } }); </script>

SoloJava Noticias

Lo mejor del mundo IT con o sin Java

The "Double-Checked Locking is Broken" Declaration

21.10.04

Después de experimentar unas cuantas situaciones extrañas con multithreading en Java™, ya no confío en que synchronized funciona como uno piensa cuando se esta implementado una inicialización diferida (lazy initialization) como por ejemplo:

if (variable == null)

variable = new MiObjeto();
return variable;

Llegué a este artículo (en Inglés) que me ayudo mucho, les anexo una pequeña porción traducida de este:

Double-Checked Locking es un método ampliamente citado y utilizado como un mecanismo eficiente para implementar inicialización diferida (lazy initialization) en un ambiente multithreaded.

Desafortunadamente, este no trabajará confiablemente de una manera indepediente de la plataforma cuando se implementa en Java. Cuando se implementa en otros lenguajes, como C++, depende del modelo de memoria del procesador, los reordenamientos efectuados por el compilador y la interacción entre el compilador y la librería de sincronización. ...

...

Alexander Terekhov (TEREKHOV@de.ibm.com) llegó a una sugerencia ingeniosa para implementar double checked locking usando almacenamiento local en threads (thread local storage). Cada thread mantiene un indicador local que determina si el thread ha realizado la sincronización requerida

class Foo {

/** If perThreadInstance.get() returns a non-null value, this thread
has done synchronization needed to see initialization
of helper */
private final ThreadLocal perThreadInstance = new ThreadLocal();

private Helper helper = null;

public Helper getHelper() {
if (perThreadInstance.get() == null) createHelper();
return helper;
}

private final void createHelper() {
synchronized(this) {
if (helper == null)
helper = new Helper();
}
// Any non-null value would do as the argument here
perThreadInstance.set(perThreadInstance);
}
}

lomejorde.com

19.10.04
Con mucho beneplácito notificamos que, SoloJava Noticias ha sido nominada en la categoría Sociedad/Blogs del premio lomejorde.com 2004. En esta misma categoría fueron nominadas : Cuaderno de Notas, blog dcaceres, El espacio de Lubrio, Fran en Gotas, Peor es Nada, qtpd, Superdharma revoloteando y Weblog Venezolano.

Este año el numero de categorías ha sido aumentado a 71 con la finalidad de ofrecer un abanico mas amplio de iniciativas.

Agradecemos a todas aquellas personas que tuvieron a bien nominarnos a este premio; así como también a nuestros consecuentes lectores que han logrado que SoloJava se destaque dentro del espacio venezolano de bitácoras.

Javali

12.10.04
En Brasil, al parecer con el apoyo del gobierno, se esta creando JAVALI, un proyecto para el desarrollo de un maquina virtual Java Open Source.

La iniciativa aun no tiene respuesta ofical de SUN, pero se comenta de diferentes posibles reacciones.

Java 5.0

1.10.04
Java 5.0, o como en broma se le dice Java 2 1.5.0 5.0 ya está disponible para el download