मेरे पास एक साधारण वर्ग है जो अपने स्वयं के धागे में कुछ गणना करता है और परिणामों को श्रोता को रिपोर्ट करता है।जावा - क्या मुझे अपने साझा श्रोता सदस्य चर को अस्थिर घोषित करना है?
class Calculator extends Thread {
protected Listener listener;
public void setListener(Listener l) {
listener = l;
}
public void run() {
while (running) {
... do something ...
Listener l = listener;
if (l != null) {
l.onEvent(...);
}
}
}
}
किसी भी समय, उपयोगकर्ता अगर वह एक निश्चित समय अवधि के लिए कोई ईवेंट नहीं चाहता है setListener (शून्य) कॉल कर सकते हैं। तो, रन() समारोह में, मैं श्रोता की एक प्रतिलिपि बनाने, तो मैं एक NullPointerException जो श्रोता के बाद अशक्त करने के लिए सेट है, तो हो सकता है में चलाने नहीं कर सकता! = अशक्त हालत की जांच सफल रहा । मेरे मामले में, मेरा मानना है कि यह सिंक्रनाइज़ करने के लिए यह एक सही विकल्प है।
मेरा प्रश्न है: क्या मुझे यहां श्रोता सदस्य चर को अस्थिर घोषित करना चाहिए? मैं अस्थिर के बारे में बहुत कुछ पढ़ रहा हूं, लेकिन सभी उदाहरण बुनियादी डेटा प्रकारों (बूलियन, int, ...) को लक्षित करते हैं, और ऑब्जेक्ट्स नहीं। इसलिए, मुझे यकीन नहीं है कि वस्तुओं को अस्थिर घोषित किया जाना चाहिए/नहीं। मेरा मानना है कि मुझे इसे अस्थिर घोषित करना है, इसलिए थ्रेड में हमेशा सदस्य चर का नवीनतम संस्करण होता है, लेकिन मुझे यकीन नहीं है।
धन्यवाद!
बस एक सुझाव के रूप में - वास्तव में आपके प्रश्न का उत्तर नहीं दे रहा है - लेकिन क्या यह आपके श्रोता पर 'सक्षम' प्रकार का ध्वज डालने के लिए बेहतर काम करेगा, और उसके बाद ग्राहक को श्रोता को शून्य या नल-शून्य सेट करने के बजाय बेहतर काम करेगा , क्या यह सेट किया गया है (सत्य) या सेट सक्षम (झूठा)? यह आपको एक अनजान एनपीई को संभालने की समस्या के आसपास आता है, और आपको समय-समय पर नए श्रोता वस्तुओं को तुरंत चालू करने से रोकता है। –
@ जेपर डी।, यह वास्तव में, वास्तव में, वास्तव में बदसूरत समाधान है जो आप वहां पहुंचे हैं। – mre
@ जिमकिली मैं आपके साथ सहमत हूं। हालांकि, मैं अपने प्रश्न को सरल बना रहा था, इसलिए यह थोड़ा अजीब लग रहा है। इसके लिए माफ़ी। –