petterg Skrevet 7. desember 2005 Del Skrevet 7. desember 2005 Denne koden henger seg på linje 2: Socket s = getSocket(); ObjectInputStream is = new ObjectInputStream(s.getInputStream()); ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream()); Denne koden henger ikke: Socket s = getSocket(); ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream()); ObjectInputStream is = new ObjectInputStream(s.getInputStream()); Er det noen fornuftig forklaring på dette? Jeg har bytta plass på disse linjene flere ganger, og det samme gjentar seg hver gang. Er det noen hemmelighet jeg ikke finner dokumentasjon til, eller bare tilfeldig? (Liker ikke tilfeldigheter når jeg lager programmer) Lenke til kommentar
MailMan13 Skrevet 8. desember 2005 Del Skrevet 8. desember 2005 Denne koden henger seg på linje 2: Socket s = getSocket(); ObjectInputStream is = new ObjectInputStream(s.getInputStream()); ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream()); Denne koden henger ikke: Socket s = getSocket(); ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream()); ObjectInputStream is = new ObjectInputStream(s.getInputStream()); Er det noen fornuftig forklaring på dette? Jeg har bytta plass på disse linjene flere ganger, og det samme gjentar seg hver gang. Er det noen hemmelighet jeg ikke finner dokumentasjon til, eller bare tilfeldig? (Liker ikke tilfeldigheter når jeg lager programmer) 5263222[/snapback] Det skjer litt handshaking når man lager slike objektstrømmer, så Sun har valgt å gjøre dette ved at en ObjectInputStream blokkerer tråden til en tilsvarende output er opprettet og utført handshake. Hvis du lager inputstream først i begge ender vil begge vente på handshake og du havner i deadlock. Vanlig måte å gjøre dette på er: Socket s = getSocket(); ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream()); os.flush(); ObjectInputStream is = new ObjectInputStream(s.getInputStream()); os.flush(); bruker man dersom underliggende outputstream er buffret for å sikre at handshake skjer med en gang og ikke bare legges til i en skrivebuffer. Lenke til kommentar
petterg Skrevet 8. desember 2005 Forfatter Del Skrevet 8. desember 2005 Det skjer litt handshaking når man lager slike objektstrømmer, så Sun har valgt å gjøre dette ved at en ObjectInputStream blokkerer tråden til en tilsvarende output er opprettet og utført handshake. Hvis du lager inputstream først i begge ender vil begge vente på handshake og du havner i deadlock. Takk! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå