ntellos Δημοσ. 11 Απριλίου 2014 Δημοσ. 11 Απριλίου 2014 Έστω ότι έχουμε τον παρακάτω κώδικα JAVA. Αναρωτιέμαι, επειδή το B έχει infinite loop αν θα καταστραφεί όταν καταστραφεί το Α; class A { public A() { new B(); } } class B implements Runnable { Thread currentThread; public B() { currentThread = new Thread(this); currentThread.start(); } @Override public void run() { while(true); } } Ή μήπως να φτιάξω κάπως έτσι την class B; class B implements Runnable { Thread currentThread; boolean isAlive; public B() { currentThread = new Thread(this); isAlive = true; currentThread.start(); } @Override public synchronized void run() { while(isAlive); } public synchronized void die() { isAlive = false; } }
Moderators Kercyn Δημοσ. 11 Απριλίου 2014 Moderators Δημοσ. 11 Απριλίου 2014 Για δες εδώ. Απ' ό,τι καταλαβαίνω το B δε θα πεθαινε έτσι κι αλλιώς (loop ή όχι) γιατί δεν έχει σχέση με το Α. Το δεύτερο implementation δεν έχει νόημα, γιατί το run τρέχει όσο το isAlive είναι true, και πεθαίνει όταν γίνεται false. Εσύ όμως το βάζεις να γίνεται false όταν τελειώνει η run. Also this. PS. Δες sig
nilosgr Δημοσ. 11 Απριλίου 2014 Δημοσ. 11 Απριλίου 2014 Γιατι βαζεις synchronized? Μηπως το Thread στο B να ηταν daemon?
ntellos Δημοσ. 12 Απριλίου 2014 Μέλος Δημοσ. 12 Απριλίου 2014 Για δες εδώ. Απ' ό,τι καταλαβαίνω το B δε θα πεθαινε έτσι κι αλλιώς (loop ή όχι) γιατί δεν έχει σχέση με το Α. Το δεύτερο implementation δεν έχει νόημα, γιατί το run τρέχει όσο το isAlive είναι true, και πεθαίνει όταν γίνεται false. Εσύ όμως το βάζεις να γίνεται false όταν τελειώνει η run. Also this. PS. Δες sig random όνομα για την μέθοδο ήθελα να δώσω. Πες την Μπάμπη αν θέλεις Γιατι βαζεις synchronized? Μηπως το Thread στο B να ηταν daemon? Λίγο η νύστα λίγο, ότι είχα έναν ήδη υπάρχον κώδικα μπροστά μου όταν το έγραφα έβαλα τα synchronized. Εμένα αυτό που με ενδιαφέρει είναι να είμαι σίγουρος όταν καταστρέφεται η κλάση Α να καταστρέφεται και η Β μαζί της.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα