我正在使用以下代码来获取文件的校验和。在计算过程中它将使用50%的CPU。

MessageDigest md = MessageDigest.getInstance("MD5");
InputStream is = new FileInputStream("C:\\Temp\\Small\\Movie.mp4"); // Size 700 MB

byte [] buffer = new byte [blockSize];
int numRead;
do
{
 numRead = is.read(buffer);
 if (numRead > 0)
 {
  md.update(buffer, 0, numRead);
 }
} while (numRead != -1);

byte[] digest = md.digest();


如何减少使用最大线程(而不是Thread.sleep(ms))的代码

问候,
金斯利·鲁本J

最佳答案

您可以使用Thread.setPriority(int newPriority)方法降低线程的优先级。这将导致其他更高优先级的线程被更频繁地执行。但是,MD5的计算速度不会像您单独保留优先级那样快-为什么您不希望此计算尽快完成?

编辑:这是"Fast MD5" implementation,与Java的默认java.security.MessageDigest实现相比,它具有显着的性能提高(平均快26%)。有关详细信息,请参见作者页面,包括code examplesbenchmarks。该代码在GNU LGPL 2.1 license下可用。

08-07 23:24