public static int rank(int key, int[] a) {
int lo = 0;
int hi = a.length - 1;
while (lo <= hi) {
// Key is in a[lo..hi] or not present.
int mid = lo + (hi - lo)/2;
if (key < a[mid]) hi = mid - 1;
else if (key > a[mid]) lo = mid + 1;
else return mid;
}
return -1;
}
उपरोक्त स्थैतिक विधि बाइनरी खोज करता है। क्या यह धागा सुरक्षित है? मुझे पता है कि स्थानीय चर धागे सुरक्षित हैं लेकिन "ए" यहां एक सरणी है, इसका मतलब है कि यह जावा में एक वस्तु है, है ना? क्या यही समस्या है? सरणी को पढ़ा जा रहा है, किसी भी तरह से संशोधित नहीं किया गया है, इसलिए मुझे लगता है कि यह विधि थ्रेड-सुरक्षित है। लेकिन मैं यह सुनिश्चित करना चाहता हूं कि मैं क्यों समझता हूं।क्या एक स्थिर विधि धागे में जावा सरणी सुरक्षित हैं?
धन्यवाद!
मैं देखता हूं। तो कोड धागा सुरक्षित नहीं है भले ही सरणी संशोधित नहीं है, है ना? लेकिन जब तक कि प्रत्येक थ्रेड जो इस विधि को कॉल करता है, वह एक अलग सरणी वस्तु के साथ करता है, जीवन अच्छा है। – user247866
बीटीडब्ल्यू - मुझे नहीं लगता कि यह कहने का अधिकार है कि उस सरणी संदर्भ द्वारा पारित की जाती हैं (लेकिन मैं समझता हूं कि आपका क्या मतलब है)। अधिक सटीक कहने के लिए कि सरणी संदर्भ मूल्य से पारित किया जाता है। धन्यवाद! – user247866
केवल इसलिए कि कुछ अन्य थ्रेड इसे उसी समय संशोधित कर सकते हैं जब आप इसे पढ़ रहे हों। –