Добрый день написал бота, в нем использовал создание трех потоков, которые работают в бесконечных
while(true){
}
но дело в том, что таким образом бот грузит процессор на 100%
Закину сюда один из потоков, для примера.
Данный поток при изменении в файле лога, вытаскивает из него последнюю строку. В самой программе, каждая новая строка должна быть обработана.
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.file.Paths;
public class LogReader implements Runnable{
private static String lastLogString = "defaultLast";
private static String sameMsgInLog = "defaultSame";
private static long prevLenght = 1;
private static File logFile = new File(String.valueOf(Paths.get("C:\\logs.txt")));
@Override
public void run() {
while (true){
if(logChanged()) {
System.out.println("лог изменен");
lastLogString = LogReader.readLog(logFile);
}
}
}
public static String readLog(File logFile){
String strToReturn = "default";
try {
RandomAccessFile randomAccessFile = new RandomAccessFile(logFile, "r");
StringBuilder builder = new StringBuilder();
long length = logFile.length();
prevLenght = length;
length--;
length--;//структура лог файла такова, что после добавления новой строки, за ней следует пустая строка, а эти строки кода переносят указатели на нужную строку
randomAccessFile.seek(length);
for (long seek = length; seek >= 0; --seek) {
randomAccessFile.seek(seek);
char c = (char) randomAccessFile.read();
builder.append(c);
if(c == '\n'){
builder = builder.reverse();
strToReturn = builder.toString();
break;
}
}
} catch (Exception e) {
System.out.println("Ошибка при чтении файла");
}
return strToReturn;
}
public static String getLastLogString() {
if(lastLogString.equals(sameMsgInLog)){
return "pass";
}
sameMsgInLog = lastLogString;
return lastLogString;
}
public static boolean logChanged(){
if(prevLenght != logFile.length()){
return true;
}else{
return false;
}
}
}
метод getLastLogString вызываю из другого потока, для получения последний строки с лога и ее обработки.
Собственно вопрос, какие есть другие варианты решения моей задачи, которые значительно убавят нагрузку?
Код конечно писать за меня не прошу, но за какие то вставки / куда гуглить, буду благодарен!