package net.minecraft.world.storage;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ThreadedFileIOBase implements Runnable
{
/** Instance of ThreadedFileIOBase */
public static final ThreadedFileIOBase threadedIOInstance = new ThreadedFileIOBase();
private List threadedIOQueue = Collections.synchronizedList(new ArrayList());
private volatile long writeQueuedCounter;
private volatile long savedIOCounter;
private volatile boolean isThreadWaiting;
private static final String __OBFID = "CL_00000605";
private ThreadedFileIOBase()
{
Thread thread = new Thread(this, "File IO Thread");
thread.setPriority(1);
thread.start();
}
public void run()
{
while (true)
this.processQueue();
}
/**
* Process the items that are in the queue
*/
private void processQueue()
{
for (int i = 0; i < this.threadedIOQueue.size(); ++i)
{
IThreadedFileIO ithreadedfileio = (IThreadedFileIO)this.threadedIOQueue.get(i);
boolean flag = ithreadedfileio.writeNextIO();
if (!flag)
{
this.threadedIOQueue.remove(i--);
++this.savedIOCounter;
}
try
{
Thread.sleep(this.isThreadWaiting ? 0L : 10L);
}
catch (InterruptedException interruptedexception1)
{
interruptedexception1.printStackTrace();
}
}
if (this.threadedIOQueue.isEmpty())
{
try
{
Thread.sleep(25L);
}
catch (InterruptedException interruptedexception)
{
interruptedexception.printStackTrace();
}
}
}
/**
* threaded io
*/
public void queueIO(IThreadedFileIO p_75735_1_)
{
if (!this.threadedIOQueue.contains(p_75735_1_))
{
++this.writeQueuedCounter;
this.threadedIOQueue.add(p_75735_1_);
}
}
public void waitForFinish() throws InterruptedException
{
this.isThreadWaiting = true;
while (this.writeQueuedCounter != this.savedIOCounter)
{
Thread.sleep(10L);
}
this.isThreadWaiting = false;
}
}