HyCodeYourTale
classpublicPriority 3

ChunkWorkerThreadFactory

com.hypixel.hytale.server.worldgen.util.ChunkWorkerThreadFactory

implements ThreadFactory

3

Methods

3

Public Methods

4

Fields

1

Constructors

Constants

AtomicIntegerFACTORY_COUNTER= new AtomicInteger()

Constructors

public
ChunkWorkerThreadFactory(ChunkGenerator chunkGenerator, String threadNameFormat)

Methods

Public Methods (3)

public
Thread newThread(Runnable r)
@Nonnull@Override
public
void run()
@Override
public
String toString()
@Nonnull@Override

Fields

Private/Package Fields (4)

privateChunkGenerator chunkGenerator
privateInteger factoryId
privateAtomicInteger threadCounter
privateString threadNameFormat

Inheritance

Parent
Current
Interface
Child

Use mouse wheel to zoom, drag to pan. Click nodes to navigate.

Related Classes

Source Code

package com.hypixel.hytale.server.worldgen.util;

import com.hypixel.hytale.server.worldgen.ChunkGeneratorResource;
import com.hypixel.hytale.server.worldgen.chunk.ChunkGenerator;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.Nonnull;

public class ChunkWorkerThreadFactory implements ThreadFactory {
   private static final AtomicInteger FACTORY_COUNTER = new AtomicInteger();
   private final ChunkGenerator chunkGenerator;
   private final String threadNameFormat;
   @Nonnull
   private final Integer factoryId;
   @Nonnull
   private final AtomicInteger threadCounter;

   public ChunkWorkerThreadFactory(ChunkGenerator chunkGenerator, String threadNameFormat) {
      this.chunkGenerator = chunkGenerator;
      this.threadNameFormat = threadNameFormat;
      this.factoryId = FACTORY_COUNTER.incrementAndGet();
      this.threadCounter = new AtomicInteger();
   }

   @Nonnull
   @Override
   public Thread newThread(Runnable r) {
      Integer threadId = this.threadCounter.incrementAndGet();
      String threadName = String.format(this.threadNameFormat, this.factoryId, threadId);
      ChunkWorkerThreadFactory.ChunkWorker workerThread = new ChunkWorkerThreadFactory.ChunkWorker(r, threadName, this.chunkGenerator);
      workerThread.setDaemon(true);
      return workerThread;
   }

   @Nonnull
   @Override
   public String toString() {
      return "ChunkWorkerThreadFactory{chunkGenerator="
         + this.chunkGenerator
         + ", threadNameFormat='"
         + this.threadNameFormat
         + "', factoryId="
         + this.factoryId
         + ", threadCounter="
         + this.threadCounter
         + "}";
   }

   protected static class ChunkWorker extends Thread {
      protected final ChunkGenerator chunkGenerator;

      protected ChunkWorker(Runnable r, @Nonnull String name, ChunkGenerator chunkGenerator) {
         super(r, name);
         this.chunkGenerator = chunkGenerator;
      }

      @Override
      public void run() {
         ChunkGeneratorResource resource = ChunkGenerator.getResource();
         resource.init(this.chunkGenerator);

         try {
            super.run();
         } finally {
            resource.release();
         }
      }
   }
}