Giriş
Kalıtım şöyle
Kalıtım şöyle
EventLoopGroup <- EventLoop <- NioEventLoop
EventLoop Arayüzü
newPromise metodu
newPromise metodu
Şöyle yaparız.
Promise<ReturnType> promise = channel.eventLoop().newPromise<ReturnType>();
scheduleAtFixedRate metodu
Channel kapatılınca timer da otomatik olarak kapatılır deniliyor ancak ben bu davranışı görmedim. ScheduledFuture nesnesinin cancel(true) metodunun çağrılması gerekti. Açıklaması şöyle
As the EventExecutor is shared across different Channels it has notion of closed Channel.
Örnek
Şöyle yaparız
Channel channel = ctx.channel();
ctx.executor().scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
...
}, 0, 60, TimeUnit.SECONDS);
ÖrnekEğer bu işi kendimiz yapmak istersek şöyle yaparız
CopyOnWriteArrayList<ScheduledFuture<?>> userTaskFutures = new CopyOnWriteArrayList<>();
public void scheduleAtFixedRate(Runnable task, long initialDelay, long period,
TimeUnit unit) {
ScheduledFuture<?> future = channel.eventLoop().scheduleAtFixedRate(task, initialDelay,
period, unit);
userTaskFutures.add(future);
}
public void disconnect() {
...
if (!userTaskFutures.isEmpty()) {
userTaskFutures.forEach(future -> future.cancel(true));
userTaskFutures.clear();
}
}
NioEventLoop Sınıfı
Giriş
Şu satırı dahil ederiz.
import io.netty.channel.nio.NioEventLoop;
Tek thread ile çalışır.
Kalıtım
Şöyle
java.util.concurrent.AbstractExecutionService|io.netty.util.concurrent.AbstractEventExecutor|io.netty.util.concurrent.AbstractScheduledEventExecutor -> Kuyruk|io.netty.util.concurrent.SingleThreadEventExecutor|io.netty.channel.SingleThreadEventLoop -> Kuyruk|io.netty.channel.nio.NioEventLoop
Kuyruklar
Bu sınıfın içinde iki tane kuyruk var.
1. java.netty.util.concurrent.AbstractScheduledEventExecutor sınıfında
PriorityQueue<ScheduledFutureTask<?>> scheduledTaskQueue;
2. java.netty.util.concurrent.SingleThreadEventExecutor sınıfında
Queue<Runnable> taskQueue
Hiç yorum yok:
Yorum Gönder