package io.loli.sc.server.util; import io.loli.sc.server.service.pan.FileService; import io.loli.util.file.FileUtils; import java.io.File; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Singleton; import org.apache.log4j.Logger; @Named @Singleton public class Md5Utils { private final static Logger logger = Logger.getLogger(Md5Utils.class); private final static ExecutorService service = Executors.newFixedThreadPool(20); @Inject private FileService fileService; public void addTask(final File file, final int id) { Future<String> result = service.submit(() -> { return FileUtils.md5Hash(file); }); try { String md5 = result.get(200, TimeUnit.SECONDS); int i = fileService.updateMd5(id, md5); if (i == 1) { logger.info("Calculate md5 successful:[id=" + id + ",md5=" + md5 + "]"); } } catch (InterruptedException | ExecutionException | TimeoutException e) { logger.error(e); } } }