我有一个 FileScanner 线程,它在列表中添加新文件和多个 FileParser 线程,它们获取新文件并每个解析自己的文件。为了同步,我将添加到列表中并从同步资源块中的列表中读取。问题是有时 FileScanner 线程似乎饿死并且没有进入同步块等待其他 FileParser 线程释放资源(列表)。我的问题是,如果我将最大优先级设置为 FileScanner,将最小优先级设置为其他 FileParser 线程,它会解决问题吗?换句话说,线程优先级是否会影响 JVM 在线程中进行选择以授予对同步块的访问权限?谢谢。
更新:
private List<ScannerFile> scannedFiles = Collections.synchronizedList(new LinkedList<ScannerFile>()) ;
这在我的 FileScanner 线程中调用:
synchronized(scannedFiles){
for(ScannerFile f: newList)
try{
scannedFiles.add(f);
}
catch(ConcurrentModificationException e){
logger.error(e);
}
}
这在我的 FileParser 线程中调用:
synchronized(scannedFiles){
try{
for(ScannerFile f: scannedFiles){
if(parserName.equals(f.getParserName()) && f.isNew() == true){
listNewFiles.add(f);
}
}
return listNewFiles;
}
catch(ConcurrentModificationException e){
logger.trace(e);
return new ArrayList<ScannerFile>();
}
}