Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Java

Πώς να βρείτε ένα Java Runtime Θέματος σε

Η τέχνη της εύρεσης θέματα κατά το χρόνο εκτέλεσης περιλαμβάνει δύο κλάσεις Java , το νήμα και ThreadGroup . Επιπλέον , πρέπει να θυμάστε να αναφέρουμε το νήμα σας όταν δημιουργείτε. Διαφορετικά , αν δεν αναφέρουμε το νήμα σας, στηριζόμενη στην προεπιλεγμένο μηχανισμό ονοματοδοσίας για τα θέματα που χτίστηκε σε Java , και ενώ μπορεί να είστε σε θέση να μαντέψει ποιο είναι το όνομα το νήμα θα πρέπει να είναι , δεν υπάρχει καμία εγγύηση ότι θα είναι το ίδιο όνομα σε όλη την όλες τις πλατφόρμες εκτέλεσης και τις εκδόσεις Java . Τα πράγματα που θα χρειαστείτε
Java Runtime Environment έκδοση 6 ή νεότερη
Η Εμφάνιση Περισσότερες οδηγίες
Η 1

Δημιουργήστε το πλαίσιο για μια κλάση Java εφαρμογή που ονομάζεται " Αναζήτηση ". Απλώς παρέχουν ένα άδειο μέθοδο main () ως σημείο εκκίνησης .

Δημόσια τάξη λέξεις {

δημόσια στατική άκυρη κύρια ( String args [ ] ) { }


} 2

Δημιουργήστε μια εκτελέσιμη αντικείμενο και θέμα ώστε να έχετε κάτι να βρούμε . Ονομάστε το νήμα " Sleeper" , παρέχοντας ένα δεύτερο επιχείρημα για τον κατασκευαστή Thread , όπου το πρώτο επιχείρημα είναι η εκτελέσιμη αναφοράς. Μετά τη δημιουργία του θέματος , να αρχίσει καλώντας την έναρξή του (μέθοδος ) . Ο κώδικας που ακολουθεί ξεκινά από το τώρα- άδειο ορισμό κύρια μέθοδο ( ) :

εκτελέσιμη δρομέας = νέα εκτελέσιμη ( ) {

public void run () {

try {

Thread.sleep ( 50000 ) ?

} αλιευμάτων ( InterruptedException ε) {

//ignore

}

}

} ?

Θέματος t = new Thread ( δρομέας , " Sleeper" ) ?

t.start ( ) ?
εικόνων 3

βρείτε το νήμα με τη βοήθεια του ThreadGroup . Όλα τα θέματα που ανήκουν σε μια ThreadGroup . Αυτές οι ομάδες κάθονται σε ένα δέντρο , όπου όλες οι ομάδες έχουν ένα μητρικό κόμβο ( κόμβοι και τα παιδιά ) , με εξαίρεση την ρίζα του δέντρου , το οποίο δεν έχει γονέα. Υποθέτοντας ότι το νήμα για να μην είναι σε ThreadGroup του τρέχοντος νήματος , με τα πόδια μέχρι την κορυφή του δέντρου κοιτάζοντας μητρική του ομίλου . Με αυτόν τον τρόπο , όταν θα πάτε να βρείτε το νήμα " Sleeper" , θα ξέρετε ότι έχετε να βρεθεί δεδομένου ότι όλα τα ενεργά νήματα θα είναι τα παιδιά του ο άρχοντας νήμα γονέα .

Θέματος currentThread = Thread.currentThread ( ) ?

ThreadGroup ομάδα = currentThread.getThreadGroup ( ) ?

ενώ ( group.getParent ( ) = null) {

ομάδα = group.getParent ( ) ? !

}
Η 4

Χρησιμοποιήστε την απαρίθμηση (μέθοδος ) της ThreadGroup στην ομάδα , όλα τα παιδιά τα θέματα αυτού του σούπερ γονέα . Η μέθοδος αποθηκεύει τα ενεργά νήματα σε μια σειρά

int activeCount = group.activeCount ()? .

ActiveThreads Θέμα [ ] = new Thread [ activeCount +5] ?

int actualCount = group.enumerate ( activeThreads ) ?
5

Χρησιμοποιήστε τον πίνακα activeThreads να βοηθήσει να βρει το χαμένο νήμα - εδώ , το ένα με την ένδειξη " Sleeper ". Μόλις βρεθεί , χρησιμοποιήστε την dumpStack (μέθοδος ) για να δώσει stacktrace του νήματος :

Θέματος βρέθηκε = null?

Για ( int i = 0 ? I

αν ( " Sleeper" ισούται με ( activeThreads [ i ] getName ( ) ) . ). {

βρέθηκαν = activeThreads [ i ] ?

σπάσει?

} }


αν ( βρέθηκε = null ! ) {

found.dumpStack ( ) ? }


Η 6

Δεδομένου ότι η γραμμή κλεισίματος στην κύρια μέθοδο ( ) , από το σύστημα να βγείτε έξω από τη μνήμη :

System.exit ( 0 ) ?
Η 7

Μεταγλώττιση και εκτέλεση του προγράμματός σας . Ενώ οι αριθμοί γραμμή στο ίχνος στοίβας μπορεί να είναι ελαφρώς διαφορετική βασισμένη σε πράγματα όπως το ύφος παρενθέσεις , όλοι θα πρέπει να παρέχει την ίδια γενική εξόδου

java.lang.Exception : . Στοίβας

σε java . lang.Thread.dumpStack ( Thread.java : 1206 )

στο Find.main ( Find.java : 31 )
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα