Δημιουργήστε το πλαίσιο για μια κλάση 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 ( ) ? } Δεδομένου ότι η γραμμή κλεισίματος στην κύρια μέθοδο ( ) , από το σύστημα να βγείτε έξω από τη μνήμη : System.exit ( 0 ) ? Μεταγλώττιση και εκτέλεση του προγράμματός σας . Ενώ οι αριθμοί γραμμή στο ίχνος στοίβας μπορεί να είναι ελαφρώς διαφορετική βασισμένη σε πράγματα όπως το ύφος παρενθέσεις , όλοι θα πρέπει να παρέχει την ίδια γενική εξόδου java.lang.Exception : . Στοίβας σε java . lang.Thread.dumpStack ( Thread.java : 1206 ) στο Find.main ( Find.java : 31 )
Η 6
Η 7
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα