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

Java global to private variable σε threads


yorgosd

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

Δημοσ.

Καλησπέρα,

 

Έχω φτιάξει ένα πρόγραμμα και δηλώνω σε μια κλάση Global κάποιες μεταβλητές που τις διαχειρίζομαι από παντού.

 

Θέλω κάποιες από αυτές όμως να είναι private για κάθε νήμα. Μήπως μπορεί κάποιος να μου πει πως μπορώ κάποιες από αυτές τις Global μεταβλητές να τις κάνω private για κάθε νήμα;;;

 

Ευχαριστώωωωωω

Δημοσ.

Όταν λες private για κάθε thread τι ακριβώς εννοείς?

 

Μία μεταβλητή, είτε "global" (public? static?) όπως την λες είτε private εφόσον 2 thread έχουν access την μοιράζονται, οπότε εφόσον θες να είναι "thread safe" θα πρέπει να την κάνεις synchronize.

 

π.χ.

 

>
public synchronized void increment() {
this.x++
}

 

Τα περί concurrency βέβαια είναι ολόκληρο topic οπότε αν μας πεις τι ακριβώς θες να κάνεις ίσως να μπορέσουμε να βοηθήσουμε συγκεκριμένα.

Δημοσ.

Τι ακριβως εννοείς global στην java. Από ότι θυμάμαι δεν υπάρχει τέτοιο keyword.

Αν θες κάποιες μεταβλητές να είναι προσβάσιμες μόνο εντός του definition μιας κλάσσης, τις κάνεις private. Ως εδώ δεν χρειάζεσαι concurrency control.

Τώρα αν θες διαφορετικά threads να έχουν πρόσβαση στις ίδιες μεταβλητές (shared resources) τότε υπάρχουν άλλοι τρόποι (με το keyword synchronized να είναι το πιο απλό).

Δημοσ.

Αν θες κάποιες μεταβλητές να είναι προσβάσιμες μόνο εντός του definition μιας κλάσσης, τις κάνεις private. Ως εδώ δεν χρειάζεσαι concurrency control.

 

Εδώ θα διαφωνίσω. Δεν έχει να κάνει με το αν είναι private μία μεταβλητή για το αν είναι thread safe (π.χ. εφόσον μοιράζονται το ίδιο instance)

Δημοσ.
Εδώ θα διαφωνίσω. Δεν έχει να κάνει με το αν είναι private μία μεταβλητή για το αν είναι thread safe (π.χ. εφόσον μοιράζονται το ίδιο instance)

 

Ok, απλά αν είναι private και δεν υπάρχουν set functions τότε μπορείς μόνο να την κάνεις access μέσα από το thread και δεν μπορείς να την κάνεις access απέξω (ακόμα και αν έχεις ενα reference στο thread object). Πχ αν την πειράζεις μόνο μέσα στην run() method του thread, δεν υπάρχει τροπος να την πειράξει οποιοδήποτε άλλο thread.

 

Σωστό ή λάθος?

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...