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 }