yorgosd Δημοσ. 5 Ιουνίου 2010 Δημοσ. 5 Ιουνίου 2010 Καλησπέρα, Έχω φτιάξει ένα πρόγραμμα και δηλώνω σε μια κλάση Global κάποιες μεταβλητές που τις διαχειρίζομαι από παντού. Θέλω κάποιες από αυτές όμως να είναι private για κάθε νήμα. Μήπως μπορεί κάποιος να μου πει πως μπορώ κάποιες από αυτές τις Global μεταβλητές να τις κάνω private για κάθε νήμα;;; Ευχαριστώωωωωω
Cue Δημοσ. 5 Ιουνίου 2010 Δημοσ. 5 Ιουνίου 2010 Όταν λες private για κάθε thread τι ακριβώς εννοείς? Μία μεταβλητή, είτε "global" (public? static?) όπως την λες είτε private εφόσον 2 thread έχουν access την μοιράζονται, οπότε εφόσον θες να είναι "thread safe" θα πρέπει να την κάνεις synchronize. π.χ. > public synchronized void increment() { this.x++ } Τα περί concurrency βέβαια είναι ολόκληρο topic οπότε αν μας πεις τι ακριβώς θες να κάνεις ίσως να μπορέσουμε να βοηθήσουμε συγκεκριμένα.
RubiksCube Δημοσ. 5 Ιουνίου 2010 Δημοσ. 5 Ιουνίου 2010 Τι ακριβως εννοείς global στην java. Από ότι θυμάμαι δεν υπάρχει τέτοιο keyword. Αν θες κάποιες μεταβλητές να είναι προσβάσιμες μόνο εντός του definition μιας κλάσσης, τις κάνεις private. Ως εδώ δεν χρειάζεσαι concurrency control. Τώρα αν θες διαφορετικά threads να έχουν πρόσβαση στις ίδιες μεταβλητές (shared resources) τότε υπάρχουν άλλοι τρόποι (με το keyword synchronized να είναι το πιο απλό).
Cue Δημοσ. 5 Ιουνίου 2010 Δημοσ. 5 Ιουνίου 2010 Αν θες κάποιες μεταβλητές να είναι προσβάσιμες μόνο εντός του definition μιας κλάσσης, τις κάνεις private. Ως εδώ δεν χρειάζεσαι concurrency control. Εδώ θα διαφωνίσω. Δεν έχει να κάνει με το αν είναι private μία μεταβλητή για το αν είναι thread safe (π.χ. εφόσον μοιράζονται το ίδιο instance)
RubiksCube Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Εδώ θα διαφωνίσω. Δεν έχει να κάνει με το αν είναι private μία μεταβλητή για το αν είναι thread safe (π.χ. εφόσον μοιράζονται το ίδιο instance) Ok, απλά αν είναι private και δεν υπάρχουν set functions τότε μπορείς μόνο να την κάνεις access μέσα από το thread και δεν μπορείς να την κάνεις access απέξω (ακόμα και αν έχεις ενα reference στο thread object). Πχ αν την πειράζεις μόνο μέσα στην run() method του thread, δεν υπάρχει τροπος να την πειράξει οποιοδήποτε άλλο thread. Σωστό ή λάθος?
RubiksCube Δημοσ. 6 Ιουνίου 2010 Δημοσ. 6 Ιουνίου 2010 Δεν καταλαβαίνω τι λες ακριβώς. Δώσε ένα παράδειγμα. Τέλος πάντων, ίσως και εγώ να μην καταλαβαίνω τι λες....
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.