2010-10-23 15 views
6

मैं अत्यधिक समवर्ती आवेदन लिख रहा हूं, जो MyClass की वस्तुओं को व्यापक रूप से संशोधित करता है। कक्षा कई क्षेत्रों से बना है। मेरा सवाल यह है कि किसी अन्य धागे द्वारा अपने क्रमिकरण के दौरान विशेष वस्तु के संशोधनों को कैसे रोकें?जावा ऑब्जेक्ट क्रमबद्धता - थ्रेड सुरक्षित?

सादर, मैट

उत्तर

7

तक synchronizing दोनों तरीकों जो क्रमानुसार और वस्तु स्थिति संशोधित।

+3

किसी उप-ऑब्जेक्ट्स (ऑब्जेक्ट के फ़ील्ड में निहित) की स्थिति में संशोधन सहित। – Thilo

+3

सिंक्रनाइज़ेशन आपकी थ्रेड-सुरक्षा चिंता हल करता है, लेकिन यह सभी पहुंच को क्रमबद्ध करके ऐसा करता है, इसलिए आपका एप्लिकेशन मूल रूप से एकल-थ्रेडेड और समवर्ती नहीं है। –

4

MyClass क्यों संशोधित करें? एक बेहतर दृष्टिकोण (और समवर्ती से निपटने के लिए बहुत आसान) आपके राज्य ऑब्जेक्ट के नए अपरिवर्तनीय संस्करणों को बनाना और सीएएस को अपडेट करते समय एटमिक रिफरेंस के साथ बनाना है। उदाहरण:

final class MyClass { 
    final int age; 
    final String name; 
    final String address; 

    MyClass(int age, String name, String address) {…} 

    MyClass setNameAndAddress(String name, String address) {return new MyClass(age, name, address);} 
} 

फिर धारावाहिकता कोई समस्या नहीं है क्योंकि आप एक अपरिवर्तनीय वस्तु से निपट रहे हैं। आपका संग्रहीत संदर्भ केवल एक वैध स्थिति से दूसरे में बदल सकता है, और कई अद्यतनों को परमाणु रूप से किया जा सकता है।

संबंधित मुद्दे