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