इस तरह जावा 5 से पहले, मैं लिखा है से ऐसे कार्य:
// pre Java 5 code:
Object lock = new Object();
// ...
synchronized(lock) {
// do something that requires synchronized access
}
लेकिन चूंकि जावा 5, मैं java.util.concurrent.locks
(से कक्षाओं का उपयोग करेंगे व्यक्तिगत रूप से, मैं इस और अधिक जटिल या त्रुटि नहीं मिल रहा है -prone):
private ReadWriteLock rwl = new ReentrantReadWriteLock();
private Lock rLock = rwl.readLock();
private Lock wLock = rwl.writeLock();
private List<String> data = new ArrayList<String>();
public String getData(int index) {
rLock.lock();
try {
return data.get(index);
} finally {
rLock.unlock();
}
}
public void addData(int index, String element) {
wLock.lock();
try {
data.add(index, element);
} finally {
wLock.unlock();
}
}
:
// Java 5 Code Using Locks
Lock lock = // ...
lock.lock();
try {
// do something that requires synchronized access
}
finally {
lock.unlock();
}
आप पढ़ने-लिखने की लॉकिंग की जरूरत है, यहाँ उदाहरण जावा 5 से पढ़ने-लिखने ताले का उपयोग कर लागू किया है
बेशक, इसे अपनी आवश्यकताओं के अनुरूप अनुकूलित करें।
स्रोत
2009-12-05 13:36:48
उन्हें एक नई कक्षा में रखने से आप जो करना चाहते हैं उसे स्पष्ट करने में मदद कर सकते हैं, इसलिए मैं इसकी अनुशंसा करता हूं। हालांकि, यह थ्रेड-सुरक्षा को बिल्कुल प्रभावित नहीं करता है। मुझे वह जवाब पसंद है जो स्पष्ट ताले (नीचे) का उपयोग करता है। –