07. september 2003 - 22:14Der 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...
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.
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...
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!!!
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.
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...
Synes godt om
Ny brugerNybegynder
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.