packagejess.day06;importjava.util.concurrent.Callable;/**
* @author Jess
* @date 2021/9/25
*//**
* 实现Callable接口
*/publicclassUseCallableimplementsCallable{privatelong from;privatelongto;publicUseCallable(){}publicUseCallable(long from,longto){this.from = from;this.to=to;}@Override/**
* 线程返回值
*/publicLongcall()throwsException{Long sum =0L;for(long i = from; i <to; i++){
sum+=i;}return sum;}}
求和性能比较
packagejess.day06;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;/**
* @author Jess
* @date 2021/9/25
*/publicclassSum{publicstaticvoidmain(String[] args)throwsExecutionException,InterruptedException{// 单线程计算long base =100000000L;Long sum =0L;// 创建时间戳long start =System.currentTimeMillis();for(int i =0; i <base ; i++){
sum+=i;}long end =System.currentTimeMillis();System.out.println(sum);System.out.println("单线程时间"+(end-start));// 多线程
start =System.currentTimeMillis();// 存放多线程任务FutureTask[]tasks =newFutureTask[10];for(int i =0; i <10; i++){FutureTask<Long> task =newFutureTask<>(newUseCallable(i*base/10,(i+1)*base/10));newThread(task).start();
tasks[i]=task;}
sum=0L;long res =0L;for(int i =0; i < tasks.length; i++){// 不能写到线程创建的for循环里 否则就是单线程了
res =(long)tasks[i].get();
sum +=res;}
end =System.currentTimeMillis();System.out.println(sum);System.out.println("多线程时间"+(end- start));}}