Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έστω ότι έχουμε τον παρακάτω κώδικα 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
Δημοσ.

Για δες εδώ. Απ' ό,τι καταλαβαίνω το B δε θα πεθαινε έτσι κι αλλιώς (loop ή όχι) γιατί δεν έχει σχέση με το Α. Το δεύτερο implementation δεν έχει νόημα, γιατί το run τρέχει όσο το isAlive είναι true, και πεθαίνει όταν γίνεται false. Εσύ όμως το βάζεις να γίνεται false όταν τελειώνει η run. Also this.

 

PS. Δες sig :P

Δημοσ.

Για δες εδώ. Απ' ό,τι καταλαβαίνω το B δε θα πεθαινε έτσι κι αλλιώς (loop ή όχι) γιατί δεν έχει σχέση με το Α. Το δεύτερο implementation δεν έχει νόημα, γιατί το run τρέχει όσο το isAlive είναι true, και πεθαίνει όταν γίνεται false. Εσύ όμως το βάζεις να γίνεται false όταν τελειώνει η run. Also this.

 

PS. Δες sig :P

 

  random όνομα για την μέθοδο ήθελα να δώσω. Πες την Μπάμπη αν θέλεις :)

Γιατι βαζεις synchronized?

Μηπως το Thread στο B να ηταν daemon?

Λίγο η νύστα λίγο, ότι είχα έναν ήδη υπάρχον κώδικα μπροστά μου όταν το έγραφα έβαλα τα synchronized.

 

Εμένα αυτό που με ενδιαφέρει είναι να είμαι σίγουρος όταν καταστρέφεται η κλάση Α να καταστρέφεται και η Β μαζί της.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...