Class ThreadDispatcher<P>

java.lang.Object
net.minestom.server.thread.ThreadDispatcher<P>

public final class ThreadDispatcher<P> extends Object
ThreadDispatcher can be used to dispatch updates (ticks) across a number of "partitions" (such as chunks) that house Tickable instances (such as entities). The parallelism of such updates is defined when the dispatcher is constructed.

It is recommended that Tickables being added to a dispatcher also implement AcquirableSource, as doing so will allow the user to synchronize external access to them using the Acquirable API.

Instances of this class can be obtained by calling of(ThreadProvider, int), or a similar overload.

See Also:
  • Method Details

    • of

      @NotNull public static <P> @NotNull ThreadDispatcher<P> of(@NotNull @NotNull ThreadProvider<P> provider, int threadCount)
      Creates a new ThreadDispatcher using default thread names (ex. Ms-Tick-n).
      Type Parameters:
      P - the dispatcher partition type
      Parameters:
      provider - the ThreadProvider instance to be used for defining thread IDs
      threadCount - the number of threads to create for this dispatcher
      Returns:
      a new ThreadDispatcher instance
    • of

      @NotNull public static <P> @NotNull ThreadDispatcher<P> of(@NotNull @NotNull ThreadProvider<P> provider, @NotNull @NotNull IntFunction<String> nameGenerator, int threadCount)
      Creates a new ThreadDispatcher using the caller-provided thread name generator nameGenerator. This is useful to disambiguate custom ThreadDispatcher instances from ones used in core Minestom code.
      Type Parameters:
      P - the dispatcher partition type
      Parameters:
      provider - the ThreadProvider instance to be used for defining thread IDs
      nameGenerator - a function that should return unique names, given a thread index
      threadCount - the number of threads to create for this dispatcher
      Returns:
      a new ThreadDispatcher instance
    • singleThread

      @NotNull public static <P> @NotNull ThreadDispatcher<P> singleThread()
      Creates a single-threaded dispatcher that uses default thread names.
      Type Parameters:
      P - the dispatcher partition type
      Returns:
      a new ThreadDispatcher instance
    • threads

      @Internal @NotNull public @Unmodifiable @NotNull List<@NotNull TickThread> threads()
      Gets the unmodifiable list of TickThreads used to dispatch updates.

      This method is marked internal to reflect TickThreads own internal status.

      Returns:
      the TickThreads used to dispatch updates
    • updateAndAwait

      public void updateAndAwait(long time)
      Prepares the update by creating the TickThread tasks.
      Parameters:
      time - the tick time in milliseconds
    • refreshThreads

      public void refreshThreads(long nanoTimeout)
      Called at the end of each tick to clear removed tickables, refresh the partition linked to a tickable, and partition threads based on ThreadProvider.findThread(Object).
      Parameters:
      nanoTimeout - max time in nanoseconds to update partitions
    • refreshThreads

      public void refreshThreads()
      Refreshes all thread as per refreshThreads(long), with a timeout of Long.MAX_VALUE.
    • createPartition

      public void createPartition(@NotNull P partition)
      Registers a new partition.
      Parameters:
      partition - the partition to register
    • deletePartition

      public void deletePartition(@NotNull P partition)
      Deletes an existing partition.
      Parameters:
      partition - the partition to delete
    • updateElement

      public void updateElement(@NotNull @NotNull Tickable tickable, @NotNull P partition)
      Updates a Tickable, signalling that it is a part of partition.
      Parameters:
      tickable - the Tickable to update
      partition - the partition the Tickable is part of
    • removeElement

      public void removeElement(@NotNull @NotNull Tickable tickable)
      Removes a Tickable.
      Parameters:
      tickable - the Tickable to remove
    • shutdown

      public void shutdown()
      Shutdowns all the tick threads.

      Action is irreversible.