Avatar billede dsj Nybegynder
07. september 2003 - 22:14 Der er 7 kommentarer og
1 løsning

Hvor er en tråd nået i koden?

Jeg et seriøst problem med at tracke en deadlock, som opstår med indtil flere dages mellemrum.

Er der en måde, hvorpå man på et givent tidspunkt kan se, hvor en given tråd (eller bare Thread.currentThread) er nået i koden. Jeg ved Thread.dumpStack() viser hvordan en tråd er nået til der hvor linien er, men det jeg gerne vil er at finde ud af, hvor i koden deadlocken er opstået uden at skulle udskrive en stacktrace 1.000.000 gange 1.000 forskellige steder i koden...
Avatar billede mmp Nybegynder
12. september 2003 - 08:49 #1
Den bedste måde at spore en deadlock på er at gennemkode og tegne ned, hvilke forskellige muligheder cpu'en har for at afvikle dine tråde. Tydeligvis opstår din deadlock, fordi tråde står og venter på hinanden.
Avatar billede mmp Nybegynder
12. september 2003 - 08:49 #2
gennemkode= gennemgå din kode
Avatar billede dsj Nybegynder
12. september 2003 - 09:42 #3
Duer ikke...

Det tager for lang tid, da der er tale om om måske 20.000 linier kode. Jeg har prøvet at lave noget ressourceallokering, men det viser ingen potentiel deadlock.

Min løsning bliver at lave en Semaphor med wait/notify selv, og anvende det i stedet for synchronized. I så fald kan man interrupte tråden og udskrive en stacktrace...
Avatar billede mmp Nybegynder
12. september 2003 - 10:08 #4
Du bliver stadig nødt til at lave synchronized metoder eller blokke - og det er klart, at du skal lave wait, notify selv - det troede jeg du havde gjort!!!
Avatar billede dsj Nybegynder
12. september 2003 - 10:18 #5
Der skal kun anvendes synchronized, hvor der anvendes wait og notify. Normalt erklærer man jo en metode synchronized, hvis man ønsker låsen på 'this', men det er der jeg vil fjerne synchronized og bruge et eget semaphor.
Avatar billede dsj Nybegynder
12. september 2003 - 10:18 #6
Det er dermed ikke klart, at man selv skal lave wait/notify...
Avatar billede mmp Nybegynder
12. september 2003 - 11:24 #7
Jamen, i virkeligheden er det ikke nødvendigt at lave sine egne semaforer i Java ligesom i alle andre sprog. Prøv at kigge i dokumentationen.
Avatar billede dsj Nybegynder
12. september 2003 - 12:01 #8
Nej, fordi synchronized i virkeligheden skaber et semaphor, men hvis der sker en deadlock i forbindelse hermed, kan trådene ikke interruptes og hele applikationen skal genstartes. Hvis jeg laver mit eget semaphor, vil jeg kunne interrupte trådene og køre videre - ydermere, vil en stacktrace på den medfølgende InterruptedException vise, hvor i koden deadlocken opstod...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester