ReentrantLock
Betingelse - anvendelse af betingelser i sluser giver dig mulighed for at opnå kontrol over styringen af adgang til strømme. Låsebetingelsen er et objekt af Condition- grænsefladen frajava.util.concurrent.locks. Brug af Condition- objekterligner på mange måder at brugewait/notify/notifyAll -metoderne i Object- klassen, som blev diskuteret i et af de foregående emner.
Lås er en grænseflade fralåserammerne, der giver en fleksibel tilgang til at begrænse adgangen til ressourcer/blokke sammenlignet med synkroniserede. Når du bruger flere låse, kan rækkefølgen af deres frigivelse være vilkårlig, plus den kan også konfigureres. Der er også mulighed for at håndtere situationen, når låsen allerede er fanget.
ReentrantLock er en af implementeringerne af Lock- grænsefladen, ReentrantLock -klassen. Det giver den samme tråd mulighed for at kalde låsemetoden, selvom den har kaldt den før, uden at frigive låsen.
Klassen ReentrantLock , ud over metoderne i Lock- grænsefladen , har en fabriksmetode newCondition() . Denne metode returnerer et objektTilstand, som giver dig mulighed for at tilføje den aktuelle tråd til ventesættet for det givne objektTilstand.
private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
//some action happens here
} finally {
R_LOCK.unlock();
}
ReadWriteLock er en grænseflade til oprettelse af læse-/skrivelåse. Låse er yderst nyttige, når et system har mange læsninger og få skrivninger.
ReentrantReadWriteLock - bruges i multi-threaded services og caches, har et pænt ydelsesboost sammenlignet med synkroniserede blokke. Faktisk fungerer klassen i 2 gensidigt udelukkende tilstande: mange læsere læser data parallelt, og når kun 1 forfatter skriver data.
ReentrantReadWriteLock.ReadLock - læselås til læsere, opnået via readWriteLock.readLock().
ReentrantReadWriteLock.WriteLock - skrivelås for forfattere, opnået via readWriteLock.writeLock().
Synkronisator
AbstractOwnableSynchronizer er basisklassen, der er ansvarlig for at bygge synkroniseringsmekanismer. Indeholder en getter/setter til at huske og læse en eksklusiv stream, der kan operere på dine data.
AbstractQueuedSynchronizer er basisklassen for synkroniseringsmekanismen i FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Det bruges også, når der skabes nye synkroniseringsmekanismer, der er afhængige af en enkelt og atomær int-værdi.
AbstractQueuedLongSynchronizer er en variant af AbstractQueuedSynchronizer , der understøtter den atomare lange værdi.
GO TO FULL VERSION