webForumDet fria alternativet

Problem vid skrivning till fil? ( Multitrådat )

3 svar · 255 visningar · startad av SPiN

SPiNMedlem sedan mars 20007 896 inlägg
#1

Tjena!

Jag sitter och pular med en serverapplikation, och fick nu några funderingar. Jag har ett eget logg-system, för att logga vad som händer, där det skrivs information till en XML-fil. Serverapplikationen är multitrådad, dvs. skapar en ny tråd för varje klient. Vid varje klientanrop anropas en klass ( ReadWriteClient.class ) som sköter hanteringen av klienten, och i ReadWriteClient så öppnas filen, loggningen görs, och till slut stängs filen.

Problemet kan beskrivas så här:

Klient[0] uppkopplad, ny tråd[0] skapas.
Logfilen öppnas av tråd[0].
Klient[1] uppkopplad, ny tråd[1] skapas.
Logfilen öppnas av tråd[1].
Loggning sker av tråd[1].
Loggen av tråd[1] sparas till filen.
Loggning sker av tråd[0].
Loggen av tråd[0] sparas till filen.

Som ni ser så kommer vid det här scenariot loggen från tråd[1] att tappas bort, eftersom att skrivning från tråd[0] sker efter, som var först att öppna filen.

Hur löser jag det på bästa sätt? Ska jag synchronize:a metoderna för öppna/spara, eller ska jag skapa pooler och synchronize:a på något sätt?

MvH,

ViktorMedlem sedan aug. 20021 752 inlägg
#2

När du skapar dina trådar så skickar du med this som ett argument och i this, dvs grund tråden så har du funktionen för att skriva till logg filen, den funktionen är då också synchronized. Anroppet från klienten ser då ut såhär

parent.writeLog("New client");

Där parent då är pekaren (referensen) till grund tråden/programmet.

/Viktor

phonkworksMedlem sedan juli 2001228 inlägg
#3

Eller sätt den som static synchronized så slipper man skicka med this överallt.

mvh
phonk

SPiNMedlem sedan mars 20007 896 inlägg
#4

Smart! Tack. :)

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)