Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап BukkitScheduler - таймеры, кулдауны, потоки

Есть ещё вот такая штука для игрищ с CompletableFuture, но её пока не тестировал. Но по логике должно работать корректно:
PHP:
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitScheduler;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;

// Author: Dymeth.Ru
public class CompletableFutureBukkit<T> extends CompletableFuture<T> {
    private final Executor defaultExecutor;

    public CompletableFutureBukkit(Plugin plugin, boolean async) {
        BukkitScheduler scheduler = plugin.getServer().getScheduler();
        this.defaultExecutor = async
                ? actions -> scheduler.runTaskAsynchronously(plugin, actions)
                : actions -> scheduler.runTask(plugin, actions);
    }

    @Override
    public Executor defaultExecutor() {
        return this.defaultExecutor;
    }
}

null-safety аннотации удалены

Преимущество перед обычным CompletableFuture в том, что такие таски должны останавливаться ядром при выгрузке плагина
А когда это может пригодится?
 
А когда это может пригодится?
Ну у себя бы я всё на них перевёл, пожалуй. Ток протестить сначала надо, корректно ли оно работает, а то как херанет в крафтшедулер 100500 потоков ))
 
Ну у себя бы я всё на них перевёл, пожалуй. Ток протестить сначала надо, корректно ли оно работает, а то как херанет в крафтшедулер 100500 потоков ))
Оно не так работает, там под капотом просто лист тасков и 2 потока основной и асинк.
 
Оно не так работает, там под капотом просто лист тасков и 2 потока основной и асинк.
Оно может так сработать, потому что размер пула не ограничен в крафтшедулере. У меня же в некоторых задачах он был фиксированного размера. Так что в любом случае пока с опаской использовать
 

Поделиться этой страницей

Назад
Верх