我当前创建了所需的函数来解析一个长达数十万行的日志文件(可能)。现在问题是我通过double-for-loops搜索线程ID 0..19,如下所示:
for(int i = 0; i < 20; i++) {
for(int j = JAnalyzer.csvlog.size()-1; j >= 0; j--) {
if(JUtility.hasThreadHung(JAnalyzer.csvlog.get(j), i)) {
listOfHungThreads.add(JAnalyzer.csvlog.get(i));
noThreadsHung++;
}
}
}
原因是我需要在整个文件中搜索每个线程ID。因此,我的问题是,是否有更有效的方法来处理这样的程序,因为我以前从未解决过这种情况。
以下是hasThreadHung
方法。
public static boolean hasThreadHung(final String str, final int threadId) {
String pattern = "ScriptExecThread\\(" + Integer.toString(threadId) + "\\).*.starting.*.on";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
boolean hasHung = m.find();
m.reset();
return hasHung;
}
请不要考虑这种过早的优化。目前处理这个问题的方法花了太长时间。
答案 0 :(得分:1)
我建议如下。它将在给定的字符串中搜索挂起的线程模式并返回线程的编号(如果找到它),如果没有线程挂起,则返回null
。
final static Pattern PATTERN = Pattern.compile( "ScriptExecThread\\(([0-9]+)\\).*.starting.*.on" );
public static String getHungThread(final String str ) {
Matcher m = PATTERN.matcher(str);
boolean hasHung = m.find();
if ( hasHung ) {
return m.group(1);
} else {
return null;
}
}