यहाँ मेरी कोड है:सिंक्रनाइज़ क्यों ठीक से काम नहीं कर रहा है?
private int count = 0;
public synchronized void increment() {
count++;
}
public void doWork() throws InterruptedException {
Thread t1 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
increment();
System.out.println(count+" "+Thread.currentThread().getName());
}}});
Thread t2 = new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
increment();
System.out.println(count+" "+Thread.currentThread().getName());
}}});
t1.start();
t2.start();
}
यहाँ मेरी उत्पादन है:
2 Thread-1
2 Thread-0
3 Thread-1
5 Thread-1
6 Thread-1
4 Thread-0
8 Thread-0
9 Thread-0
7 Thread-1
10 Thread-0
मेरे समझ के साथ कि increment
synchronized
है। तो, इसे पहले increment
एक नंबर होना चाहिए और फिर lock
जारी करें और फिर lock
को t1
या t2
पर lock
दें। तो, यह एक समय में increment
एक नंबर होना चाहिए, है ना?
लेकिन मेरा कोड incrementing
एक समय में दो या तीन नंबर क्यों है? क्या मैं कुछ गलत कर रहा हूं (मैं नौसिखिया हूँ)?
'वृद्धि '' सिंक्रनाइज़' है, लेकिन 'गिनती' नहीं है। दो बयान 'वृद्धि() 'और' System.out.println() 'परमाणु नहीं हैं। – bradimus