# सिंक्रोनाइज़ेशन — एडवांस्ड जावा

Source: https://www.geekswithgeeks.com/hi/advanced-java/adv-synchronization

> synchronized व volatile से रेस कंडीशन व विज़िबिलिटी बग ठीक करें, atomic व ReentrantLock को प्राथमिकता दें, और डेडलॉक से बचने हेतु लॉक एक ही क्रम में लें।

## दो समस्याएँ

साझा म्यूटेबल स्टेट से **रेस कंडीशन** और **विज़िबिलिटी** बग होते हैं। `synchronized` दोनों ठीक करता है; `volatile` केवल विज़िबिलिटी।

## atomic व lock को प्राथमिकता

`AtomicLong` आदि CAS से लॉक-फ़्री अपडेट देते हैं। `ReentrantLock` में `tryLock`, टाइमआउट, फ़ेयरनेस मिलते हैं।

```java
private final AtomicLong hits = new AtomicLong();
public void record() { hits.incrementAndGet(); }

private final ReentrantLock lock = new ReentrantLock();
lock.lock();
try { /* critical section */ } finally { lock.unlock(); }
```

## डेडलॉक से बचें

डेडलॉक के लिए दो थ्रेड एक ही दो लॉक उल्टे क्रम में लेते हैं। समाधान: लॉक हमेशा एक ही क्रम में लें।
