Javaスレッド消費CPUの最適化方法
2322 ワード
import java.io.File;
import java.io.FileFilter;
import java.util.Hashtable;
import java.util.Map;
public class PictureFileListener {
/**
*
*/
private static Map<String, File> problemFileMap = new Hashtable<String, File>();
/**
*
*/
File listenDirectory = new File("C:\\picture");
/**
*
*
* @param args
*/
public static void main(String[] args) {
//
new Thread(new Runnable() {
public void run() {
//
File listenDirectory = new File("C:\\picture");
if (!listenDirectory.exists() || !listenDirectory.isDirectory()) {
listenDirectory.mkdirs();
}
//
File bakDirectory = new File("C:\\picture_bak");
if (!bakDirectory.exists() || !bakDirectory.isDirectory()) {
bakDirectory.mkdirs();
}
while (true) {
if (listenDirectory != null && listenDirectory.exists() && listenDirectory.isDirectory()) {
File[] pictureFiles = listenDirectory.listFiles(new FileFilter() {
public boolean accept(File file) {
if (!file.isFile() || file.getAbsolutePath().lastIndexOf(".jpg") == -1) {
return false;
}
return true;
}
});
if (pictureFiles != null) {
for (File currentFile : pictureFiles) {
boolean renameSuccess = currentFile.renameTo(new File(bakDirectory + File.separator + currentFile.getName()));
if (!renameSuccess) {
PictureFileListener.problemFileMap.put(currentFile.getAbsolutePath(), currentFile);
}
}
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
スレッドWhile(true)を使用すると、1つのCPU(マシンはデュアルコア4スレッドで、CPUは25%を占め、ちょうど1つのCPUスレッドを食べてしまいます)が食べられます.
だから参加するsleep(microsecond)は、現在のスレッドがどのくらいスリープしているかを設定します.これにより、CPUがスレッドスリープを実行しても、常に占有されません.