smb wrote:
> Hej
>
> Jeg har følgende problem:
>
> I en applikation der består af 3 lag
> Præsentationslag (Servlet, JSP)
> Funktionslag (Javaklasser, muligvis senere EJB)
> Databaselag (Javaklasser, JNDI navneserver lookup mv)
>
> Jeg har desuden et Objekt som indeholder oplysninger om adgang til den
> underliggende DB2 database ( der befinder sig på henholdsvis AS/400, VMS,
> WM, NT, OS/2, senere Linux og Windows 2000)
>
> Det objekt vil jeg gerne være fri for at instantiere og læse ind fra disken
> hver gang der skal skabes en forbindelse til databasen. Men hvordan gør jeg
> det, så det samtidigt er trådsikkert ??
Dette skulle være standardmåden at gøre det på, men der er nok andre:
class ThreadSafeSingleton
{
// referencen, der returneres af getInstance()
private ThreadSafeSingleton single = null;
//efter sigende det billigste Objekt - skal bare bruges til synkronisering
private static final Object sync = new int[0];
// returnerer samme objekt hver gang
public static ThreadSafeSingleton getInstance()
{
//undgå at synkronisere alle kald
if( single == null )
{
synchronized( sync )
{
//hvis en tråd venter på en tråd, der konstruerer, skal den
ikke konstruere et nyt objekt
if( single == null )
{
single = new ThreadSafeSingleton();
}
}
}
return single;
}
//privat konstruktor - konstruktion styres af klassen
private ThreadSafeSingleton()
{
//...
}
}
Ulrik Magnusson
--
"I am the eggman. They are the eggmen. I am the walrus."
beatles - 'I am the walrus', Magical Mystery Tour
Visit my home page:
http://www.geocities.com/ulrikm