`

Java线程耗费CPU的优化办法

 
阅读更多

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)的话,就会吃掉一个CPU(机器是双核4线程的,CPU占用25%,正好吃掉了一个CPU线程)

所以加入Thread.sleep(microsecond)来设置当前线程休眠多久,这样CPU去执行线程休眠就不会一直占用了

分享到:
评论

相关推荐

    java对大数据量文件内容的多线程读取和排序.pdf

    Java 对大数据量文件内容的多线程读取和排序 在处理大数据量文件内容时,多线程读取和排序是非常重要的。下面我们将讨论如何使用 Java 对大数据量文件内容进行多线程读取和排序。 首先,我们需要生成一个随机的...

    基于硬件cache锁机制的Java虚拟机即时编译器优化

    本文提到的基于硬件cache锁机制的Java虚拟机即时编译器优化,意味着在即时编译的过程中,JVM尝试利用CPU的硬件cache锁功能来优化编译后代码的执行。这种优化策略可能涉及动态地锁住涉及频繁访问数据的缓存行,或是在...

    java对大数据量文件内容的多线程读取和排序.doc

    Java 对大数据量文件内容的多线程读取和排序 Java 对大数据量文件内容的多线程读取和排序是非常复杂的任务,涉及到多个方面的技术,包括文件读取、多线程处理、排序算法等。本文将对该问题进行详细的分析和解决方案...

    多线程操作实例源码

    程序也是如此,线程越多耗费的资源也越多,需要CPU时间去跟踪线程,还得解决诸如死锁,同步等问题。总之,如果你不想你的公司被称为“皮包公司”,你就得多几个员工;如果你不想让你的程序显得稚气,就在你的程序里...

    多线程操作实例源码,,

    程序也是如此,线程越多耗费的资源也越多,需要CPU时间去跟踪线程,还得解决诸如死锁,同步等问题。总之,如果你不想你的公司被称为“皮包公司”,你就得多几个员工;如果你不想让你的程序显得稚气,就在你的程序里...

    Java实现通用线程池

    Java 语言编写一个通用的线程池,线程池通俗的描述就是预先创建若干空闲线程,等到需要用多线程去处理事务的时候去唤醒某些空闲线程执行处理任务,这样就省去了频繁创建线程的时间,因为频繁创建线程是要耗费大量的 ...

    JAVA JVM性能调优监控工具详解

    TIME列显示各个Java线程耗费的CPU时间,CPU时间最长的是线程ID为21742的线程。 ``` 3. **使用jstack输出堆栈信息**:接下来使用`jstack &lt;进程ID&gt;`来获取该进程的所有线程堆栈信息,然后通过`grep`命令过滤出特定...

    Java编程线程同步工具Exchanger的使用实例解析

    2. 耗费资源:Exchanger需要占用一定的系统资源,例如内存和CPU,可能会对系统性能产生影响。 Exchanger是一种非常有用的线程同步工具,它可以方便地实现线程之间的数据交换,提高程序的效率和可靠性。但是,开发者...

    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解.docx

    例如,使用 ps、top、printf、jstack、grep 等命令来找出某个 Java 进程中最耗费 CPU 的 Java 线程并定位堆栈信息。 例如:root@ubuntu:/ ps -ef | grep mrf-center | grep -v grep root 21711 1 1 14:47 pts/3 00:...

    Windows是一个多任务的系统

    程序也是如此,线程越多耗费的资源也越多,需要CPU时间去跟踪线程,还得解决诸如死锁,同步等问题。总之,如果你不想你的公司被称为“皮包公司”,你就得多几个员工;如果你不想让你的程序显得稚气,就在你的程序里...

    一站式问题定位平台,还在为线上问题而烦恼吗?实时线程栈监控、线程池监控、动态arthas命令集、依赖分析等等等,助你快速定位问题

    在IT行业中,问题定位是开发和运维人员常常面临的一大挑战,尤其在复杂的分布式系统中,线上问题的排查往往需要耗费大量的时间和精力。针对这一需求,出现了一站式问题定位平台,如描述中提及的,这类平台提供了丰富...

    ProcList.rar_ProcList

    描述中提到,“类出进程和线程”,意味着作者可能创建了一个类或者一组类来表示和操作进程与线程,并且这个过程耗费了相当的时间,暗示了项目的复杂性和深度。 在IT行业中,进程和线程是操作系统中的基本概念。进程...

    基于Java+MySQL设计与实现的秒杀与抢购模型架构【100013279】

    对高并发高负载情形下的应用场景进行分析,以高效地处理资源竞争为目的,设计一个秒杀与抢购模型。...第二种方案的响应时间最慢,原因是高并发情形下多个线程不断回滚,耗费了大量的CPU资源,导致性能低下。

    linux下的调试工具valgrind.pdf

    Valgrind是一款强大的Linux调试和分析工具,专为C/C++开发者设计,旨在解决内存管理和多线程问题。它提供了一个虚拟的CPU环境,...通过熟练掌握Valgrind,可以极大地提升开发效率,避免耗费大量时间在排查此类问题上。

    线上系统性问题定位与方法论.docx

    常见的问题排查工具箱包括 CPU:top –Hp、系统内存:free –m、IO:iostat、磁盘:df –h、网络链接:netstat、gc:jstat –gcutil、线程:jstack、Java 内存:jmap 等。 本文提供了一套相对有规律的问题定位处理...

    大学计算机基础理论试题(库).doc

    19. 多任务特性:在Windows系统中,多任务意味着可以同时运行多个应用程序,这得益于处理器的多线程技术和内存管理机制。 通过这个题库,学生可以全面复习计算机基础理论,提高理解与应用能力,为未来的IT学习和...

Global site tag (gtag.js) - Google Analytics