29 Kasım 2022 Salı

HazelcastAPI AbstractInvocationFuture Sınıfı

Giriş
Şu satırı dahil ederiz
import com.hazelcast.spi.impl.AbstractInvocationFuture;
Açıklamasında şöyle yazıyor
Custom implementation of CompletableFuture.
Kalıtım şöyle
AbstractInvocationFuture
  InvocationFuture
  ClientInvocationFuture

Client tarafında şöyle kullanılıyor
new ClientInvocation(client, request, objectName).invoke().joinInternal();
joinInternal metodu
Kodu şöyle. Burada Future cevap gelinceye kadar spin lock gibi sürekli işlemci harcayarak dönüyor.
@Override
public V joinInternal() {
  final Object response = registerWaiter(Thread.currentThread(), null);
  if (response != UNRESOLVED) {
    // no registration was done since a value is available.
    return resolveAndThrowForJoinInternal(response);
  }

  boolean interrupted = false;
  try {
    do {
      manageParking(0);
      if (isDone()) {
        return resolveAndThrowForJoinInternal(state);
       } else if (Thread.interrupted()) {
         interrupted = true;
         onInterruptDetected();
       }
     } while (true);
   } finally {
     restoreInterrupt(interrupted);
   }
}
manageParking metodu
Kodu şöyle. LockSupport.park() ile  bloke olmadan sadece tekrar schedule ediliyor
private void manageParking(long timeoutNanos) {
  try {
    // if the caller thread is a ForkJoinWorkerThread
    if (ForkJoinTask.inForkJoinPool()) {
      ForkJoinPool.managedBlock(new ManagedBlocker(timeoutNanos));
    } else if (timeoutNanos == 0) {
      park();
    } else if (timeoutNanos > 0) {
      parkNanos(timeoutNanos);
    }
  } catch (InterruptedException e) {
    Thread.currentThread().interrupt();
  }
}
resolveAndThrowIfException metodu
Soyut bir metod. InvocationFuture ve ClientInvocationFuture tarafından override edilir.

Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt