我在我的 Mac(Majave 版本)4Cpus/i5 和 16G 内存上进行了 go(1.11) 和 java(1.8) 之间的简单性能测试,我发现,读取一个小文件,golang 比 java 快 6~7 倍。下面是我的测试代码,我想确认一下是我的测试代码错了还是漏了什么?
爪哇
与并发.ExecutorService
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class TaskWithResult implements Callable<String> {
private static String readToString() {
String fileName = "/Users/pis/IdeaProjects/Test/src/data/test.txt";
File file = new File(fileName);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
try {
FileInputStream in = new FileInputStream(file);
in.read(filecontent);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
SimpleDateFormat myFmt=new SimpleDateFormat("yyyy-MM-dd HH: mm: ss: SSS: ");
Date d1 = new Date();
return myFmt.format(d1);
}
/**
* 任务的具体过程,一旦任务传给ExecutorService的submit方法,
* 则该方法自动在一个线程上执行
*/
public String call() throws Exception {
String result = readToString();
System.out.println(result);
//该返回结果将被Future的get方法得到
return result;
}
}
public class readFile{
public static void main(String args[]){
ExecutorService es = Executors.newFixedThreadPool(5);
List<Future<String>> resultList = new ArrayList<Future<String>>();
SimpleDateFormat myFmt=new SimpleDateFormat("yyyy-MM-dd HH: mm: ss: SSS");
Date d1 = new Date();
System.out.println("Start Time:"+myFmt.format(d1));
for (int i = 0; i < 1000; i++){
//使用ExecutorService执行Callable类型的任务,并将结果保存在future变量中
Future<String> future = es.submit(new TaskWithResult());
//将任务执行结果存储到List中
resultList.add(future);
}
}
侃侃无极
相关分类