多线程暴力破解效率测试
package com.cmb;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TEST {
private static ExecutorService executorService = Executors.newFixedThreadPool(16);
private static Set numberSet = new HashSet();
private static Set charSet = new HashSet();
private static boolean find = false;
private static int step = 10;
static {
for (int i = 0; i < 10; i++) {
numberSet.add(i);
}
for (char i = 'a'; i <= 'z'; i++) {
charSet.add(i);
}
for (char i = 'A'; i <= 'Z'; i++) {
charSet.add(i);
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String password = sc.nextLine();
long stTime = System.currentTimeMillis();
for (long i = 0; i < Long.MAX_VALUE ; i++) {
if (password.equals(String.valueOf(i))){
System.out.println(password);
break;
}
}
System.out.println("单线程:" + (System.currentTimeMillis()-stTime));
try {
Thread.sleep(2500);
} catch (InterruptedException e) {
e.printStackTrace();
}
List<Object> list = new ArrayList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
stTime = System.currentTimeMillis();
CompletableFuture[] objects = list.stream().map(i -> CompletableFuture.runAsync(() -> {
long st = Long.valueOf(String.valueOf(i));
for (long j = 0; j < Long.MAX_VALUE; j++) {
if (password.equals(String.valueOf(st)) || find){
System.out.println(password);
find = true;
break;
}
st += step;
}
}, executorService)).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(objects).join();
System.out.println("多线程:" + (System.currentTimeMillis()-stTime));
}
}
最轻松的学习方式莫过于在学习中找到属于自己的乐趣,与诸君共勉
浙公网安备 33010602011771号