Πώς σκοτώνετε ένα java.lang.Thread
στη Java;
Δείτε αυτό νήμα της Sun σχετικά με το γιατί απαρνήθηκε το Thread.stop()
. Αναλύει λεπτομερώς γιατί αυτή ήταν μια κακή μέθοδος και τι πρέπει να γίνει για να σταματούν με ασφάλεια τα νήματα γενικά.
Ο τρόπος που προτείνουν είναι να χρησιμοποιήσετε μια κοινή μεταβλητή ως σημαία που ζητάει από το νήμα παρασκηνίου να σταματήσει. Αυτή η μεταβλητή μπορεί στη συνέχεια να οριστεί από ένα διαφορετικό αντικείμενο που ζητά τον τερματισμό του νήματος.
Γενικά δεν..
Του ζητάτε να διακόψει ό,τι κάνει χρησιμοποιώντας Thread.interrupt() (javadoc link)
Μια καλή εξήγηση του γιατί υπάρχει στο javadoc εδώ (java technote link)
Ένας τρόπος είναι να ορίσετε μια μεταβλητή κλάσης και να τη χρησιμοποιήσετε ως φρουρό.
Class Outer {
public static volatile flag = true;
Outer() {
new Test().start();
}
class Test extends Thread {
public void run() {
while (Outer.flag) {
//do stuff here
}
}
}
}
Ορίστε μια εξωτερική μεταβλητή κλάσης, π.χ. flag = true στο παραπάνω παράδειγμα. Ορίστε την σε false για να 'σκοτώσετε' το νήμα.