001 package net.minecraft.world.storage;
002
003 import java.util.ArrayList;
004 import java.util.Collections;
005 import java.util.List;
006
007 public class ThreadedFileIOBase implements Runnable
008 {
009 /** Instance of ThreadedFileIOBase */
010 public static final ThreadedFileIOBase threadedIOInstance = new ThreadedFileIOBase();
011 private List threadedIOQueue = Collections.synchronizedList(new ArrayList());
012 private volatile long writeQueuedCounter = 0L;
013 private volatile long savedIOCounter = 0L;
014 private volatile boolean isThreadWaiting = false;
015
016 private ThreadedFileIOBase()
017 {
018 Thread var1 = new Thread(this, "File IO Thread");
019 var1.setPriority(1);
020 var1.start();
021 }
022
023 public void run()
024 {
025 while (true)
026 {
027 this.processQueue();
028 }
029 }
030
031 /**
032 * Process the items that are in the queue
033 */
034 private void processQueue()
035 {
036 for (int var1 = 0; var1 < this.threadedIOQueue.size(); ++var1)
037 {
038 IThreadedFileIO var2 = (IThreadedFileIO)this.threadedIOQueue.get(var1);
039 boolean var3 = var2.writeNextIO();
040
041 if (!var3)
042 {
043 this.threadedIOQueue.remove(var1--);
044 ++this.savedIOCounter;
045 }
046
047 try
048 {
049 Thread.sleep(this.isThreadWaiting ? 0L : 10L);
050 }
051 catch (InterruptedException var6)
052 {
053 var6.printStackTrace();
054 }
055 }
056
057 if (this.threadedIOQueue.isEmpty())
058 {
059 try
060 {
061 Thread.sleep(25L);
062 }
063 catch (InterruptedException var5)
064 {
065 var5.printStackTrace();
066 }
067 }
068 }
069
070 /**
071 * threaded io
072 */
073 public void queueIO(IThreadedFileIO par1IThreadedFileIO)
074 {
075 if (!this.threadedIOQueue.contains(par1IThreadedFileIO))
076 {
077 ++this.writeQueuedCounter;
078 this.threadedIOQueue.add(par1IThreadedFileIO);
079 }
080 }
081
082 public void waitForFinish() throws InterruptedException
083 {
084 this.isThreadWaiting = true;
085
086 while (this.writeQueuedCounter != this.savedIOCounter)
087 {
088 Thread.sleep(10L);
089 }
090
091 this.isThreadWaiting = false;
092 }
093 }