diff --git a/src/main/java/com/minecrafttas/tasmod/util/FileThread.java b/src/main/java/com/minecrafttas/tasmod/util/FileThread.java index ffcc968f..fa3b7cf6 100644 --- a/src/main/java/com/minecrafttas/tasmod/util/FileThread.java +++ b/src/main/java/com/minecrafttas/tasmod/util/FileThread.java @@ -8,8 +8,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; -import java.util.ArrayList; -import java.util.List; +import java.util.concurrent.ConcurrentLinkedQueue; /** * Thread for writing files to disc @@ -21,34 +20,35 @@ public class FileThread extends Thread { private final PrintWriter stream; private boolean end = false; - private final List output = new ArrayList<>(); + private final ConcurrentLinkedQueue output = new ConcurrentLinkedQueue<>(); public FileThread(Path fileLocation, boolean append) throws IOException { + super("TASmod FileWriter Thread"); OutputStream outStream = Files.newOutputStream(fileLocation, StandardOpenOption.CREATE, append ? StandardOpenOption.APPEND : StandardOpenOption.TRUNCATE_EXISTING); - stream = new PrintWriter(new OutputStreamWriter(outStream, StandardCharsets.UTF_8)); + stream = new PrintWriter(new OutputStreamWriter(outStream, StandardCharsets.UTF_8), true); } public void addLine(String line) { - synchronized (output) { - output.add(line + "\n"); - } + output.add(line + "\n"); } @Override public void run() { while (!end) { - synchronized (output) { - ArrayList newList = new ArrayList(output); - output.clear(); - for (String line : newList) { - stream.print(line); - } - } + writeOutput(); } + writeOutput(); // Print any remaining lines, just to be safe... + stream.flush(); stream.close(); } + private void writeOutput() { + String line; + while ((line = output.poll()) != null) + stream.print(line); + } + public void close() { end = true; }