De kunst van het vinden van onderwerpen die tijdens runtime omvat twee Java-klassen , Draad en ThreadGroup . Bovendien moet u niet vergeten om uw draad te noemen wanneer u deze maakt . Anders , als je niet de naam van uw draad , bent u vertrouwen op de standaard naamgeving mechanisme voor discussies ingebouwd in Java , en terwijl je misschien in staat zijn om te raden wat de naam draad zou moeten zijn , is er geen garantie dat het zal dezelfde naam te zijn over alle runtime -platforms en Java -versies . Wat je Java Runtime Environment versie 6 of hoger Need Toon Meer Aanwijzingen 1 Maak het kader voor een Java-applicatie klasse met de naam "Find . " Gewoon zorgen voor een lege main ( ) -methode als uitgangspunt . Public class Heb je { public static void main ( String args [ ] ) op { } } kopen van 2 Maak een Runnable object en discussie , zodat je iets te vinden zijn . Noem de thread " Sleeper " door middel van een tweede argument aan de discussie constructeur , waarbij het eerste argument is de Runnable referentie. Na het aanmaken van de Draad, start deze door de methode start ( ) bellen . De volgende code begint het nu lege main ( ) methode definitie : Runnable runner = new Runnable ( ) { public void run ( ) { try { < br Thread.sleep > ( 50000 ) ; } catch ( InterruptedException e ) { //negeren } } < br > } ; Thread t = new Thread ( runner , " Sleeper " ) ; t.start ( ) op ; 3 Zoek de draad met de hulp van ThreadGroup . Alle vragen die behoren tot een ThreadGroup . Deze groepen zitten in een boom waar alle groepen hebben een bovenliggende node ( en kinderen knooppunten ) , met uitzondering van de wortel van de boom , die geen ouder heeft . Ervan uitgaande dat de draad te vinden is niet in ThreadGroup de huidige thread , loop naar de top van de boom door te kijken naar de moedermaatschappij van de groep. Op die manier, als je naar de " Sleeper " thread vinden , dan weet je dat je het hebt gevonden omdat alle actieve discussies zullen zijn kinderen van de overlord bovenliggende draad . Thread currentThread = Thread.currentThread ( ) ; ThreadGroup groep = currentThread.getThreadGroup ( ) ; terwijl ( group.getParent ( ) = null ) { groep = group.getParent ( ) ; ! < br > } 4 Gebruik de methode van ThreadGroup te groeperen alle kinderen draden van deze super ouder opsommen ( ) . De methode slaat de actieve threads in een array int activeCount = group.activeCount ( ) ; . Thread activeThreads [ ] = new Thread [ activeCount 5 ] ; int actualCount = group.enumerate ( activeThreads ) ; - " . Sleeper " 5 Gebruik de activeThreads matrix helpen bij het vinden van de ontbrekende draad hier , met de aanduiding Eenmaal gevonden , gebruikt u de dumpStack ( ) methode om een stacktrace van de schroefdraad te voorzien : Thread , vond = null; for (int i = 0 ; i < actualCount ; i + + ) { < br > if ( " Sleeper " is gelijk aan ( activeThreads [ i ] getName ( ) ) . . ) { gevonden = activeThreads [ i ] ; break ; if ( gevonden = null ) { found.dumpStack ( ) > ; } 6 In de afsluitende lijn naar uw belangrijkste ( ) -methode , vertel het systeem uit te sluiten van het geheugen : System.exit ( 0 ) ; 7 Compileer en run je programma . Terwijl de regelnummers in de stack trace iets andere gebaseerd op dingen zoals haakjes stijl zou kunnen zijn , zij allen moeten bieden dezelfde algemene uitgang java.lang.Exception : . Stack trace op Java . lang.Thread.dumpStack ( Thread.java : 1206 ) op Twitter bij Find.main ( Find.java : 31 ) op Twitter
|