synchronized β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π² Java Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡΡ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ. ΠΡΠΎΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΠΊΡΠΈΡΠΌ ΠΊΠΎΠ΄Π°, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π³ΠΎΠ½ΠΊΠΈ (race conditions).
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ synchronized
Synchronized ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ°ΠΌ ΠΊΠΎΠ΄Π°. ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π²Ρ
ΠΎΠ΄ΠΈΡ Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ synchronized
, ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡ (lock) Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, synchronized
Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ increment
ΠΈ getCount
Π½Π΅ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ count
.
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public synchronized int getCount() {
return count;
}
}
ΠΠ½ΠΎΠ³Π΄Π° ΡΠ΄ΠΎΠ±Π½Π΅Π΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ Π²Π΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄, Π° ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ ΡΠ°ΡΡΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π»ΠΎΠΊ synchronized
:
public void increment() {
synchronized (this) {
count++;
}
}
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ
- ΠΠΎΠ½ΠΈΡΠΎΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, Π° Π½Π΅ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° (instance method), ΡΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ (this). ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ, ΡΠΎ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠΌ Π²ΡΡΡΡΠΏΠ°Π΅Ρ ΡΠ°ΠΌ ΠΊΠ»Π°ΡΡ (ClassName.class).
- ΠΠ»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅ (deadlock), Π΅ΡΠ»ΠΈ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΡΠ°ΡΡΡΡ Π·Π°Ρ Π²Π°ΡΠΈΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΡ Π² Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
- ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π°Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ: ΠΏΡΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ
Π·Π°Π΄Π°ΡΠ°Ρ
ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
synchronized
ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, ΠΈ ΡΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ°java.util.concurrent
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,ReentrantLock
).
Π§Π°ΡΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ
Π§ΡΠ΅Π·ΠΌΠ΅ΡΠ½Π°Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ (Over-synchronization)
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ½ΠΈΠ·ΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΆΠ΄Π°ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΡΡΠ°ΡΡΠΊΠ°ΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π°ΡΠΈΡΡ.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΡΠ»ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΡΡΠΎ Π½Π΅ Π·Π°ΡΠΈΡΠΈΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
public class Counter {
private int count = 0;
public void increment() {
// ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅
Object lock = new Object();
synchronized (lock) {
count++;
}
}
}
ΠΠ΄Π΅ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ lock
, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π‘ΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, this
ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅).
Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ.
public class StaticSyncExample {
private static int staticCount = 0;
private int instanceCount = 0;
public static synchronized void incrementStatic() {
staticCount++;
}
public synchronized void incrementInstance() {
instanceCount++;
}
}
ΠΠ΄Π΅ΡΡ Π²ΡΠ·ΠΎΠ² incrementStatic
ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ StaticSyncExample.class
, Π° incrementInstance
β Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅Π΄ΠΎΡΠ°Π·ΡΠΌΠ΅Π½ΠΈΡΠΌ Π² ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡ Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ
public class Container {
private static final List<String> list = new ArrayList<>();
synchronized void addEntry(String s) {
list.add(s)
}
}
ΠΠ΄Π΅ΡΡ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅Ρ 2+ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Container
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ
Π±ΡΠ΄Π΅Ρ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ list
Ρ Π½Π°Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈ Π΅Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π° Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΡΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΡ. Π§ΡΠΎΠ±Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π²Π΅ΡΡ ΠΊΠ»Π°ΡΡ (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΊΠ°ΠΊ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π΅ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅), ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠΎΠΏΡΡΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°: Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π±Π΅Π· ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΈΡ Π·Π°ΠΏΠΈΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ Π² Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
// ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
public int getCount() {
return count;
}
}
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ count.
ΠΠ΅ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
ΠΠ±Π»Π°ΡΡΡ:: 00 Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
Π ΠΎΠ΄ΠΈΡΠ΅Π»Ρ:: ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² Java
ΠΡΡΠΎΡΠ½ΠΈΠΊ::
Π‘ΠΎΠ·Π΄Π°Π½Π°:: 2024-10-09
ΠΠ²ΡΠΎΡ::