Scheduler — планировщик. Он планирует выполнение переданного ему кода на ближайшее будущее.
Код ты передаёшь ему сам в виде класса, реализующего интерфейс
Runnable (плюс/минус дополнительные слои обёрток): public void run() { /* TO DO HERE */ }.
Основной серверный поток на каждом игровом тике (20 раз в секунду) выполняет запланированные планировщиком на именно этот тик Runnable-ы.
Есть возможность запланировать выполнение: а) на ближайший тик, б) через N тиков, в) указать регулярное повторение кода через N тиков с задержкой M тиков. Другими словами — на все случаи жизни.
Планировать выполнение кода можно из любого потока, основного или любого параллельного, и именно планировщик выполняет роль синхронизации между ними.
Дальше сам,
@Jonny462.