package net.minecraft.world.storage;
import com.google.common.collect.Lists;
import java.util.Collections;
import java.util.List;
public class ThreadedFileIOBase implements Runnable
{
/** Instance of ThreadedFileIOBase */
private static final ThreadedFileIOBase threadedIOInstance = new ThreadedFileIOBase();
private List threadedIOQueue = Collections.synchronizedList(Lists.newArrayList());
private volatile long writeQueuedCounter;
private volatile long savedIOCounter;
private volatile boolean isThreadWaiting;
private static final String __OBFID = "CL_00000605";
private ThreadedFileIOBase()
{
Thread var1 = new Thread(this, "File IO Thread");
var1.setPriority(1);
var1.start();
}
public static ThreadedFileIOBase func_178779_a()
{
return threadedIOInstance;
}
public void run()
{
while (true)
{
this.processQueue();
}
}
/**
* Process the items that are in the queue
*/
private void processQueue()
{
for (int var1 = 0; var1 < this.threadedIOQueue.size(); ++var1)
{
IThreadedFileIO var2 = (IThreadedFileIO)this.threadedIOQueue.get(var1);
boolean var3 = var2.writeNextIO();
if (!var3)
{
this.threadedIOQueue.remove(var1--);
++this.savedIOCounter;
}
try
{
Thread.sleep(this.isThreadWaiting ? 0L : 10L);
}
catch (InterruptedException var6)
{
var6.printStackTrace();
}
}
if (this.threadedIOQueue.isEmpty())
{
try
{
Thread.sleep(25L);
}
catch (InterruptedException var5)
{
var5.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;
}
}