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