【发布时间】:2021-01-12 11:14:34
【问题描述】:
我有练习学习多线程。我有一个正确的密码,例如:xxYYmmDD xx 是我的“员工”列表中的首字母,YY 是出生年份,mm 是出生月份,DD 是出生日期。例如:Nichole Hunter 09/10/93 密码为:NH930910。 但是这个循环只知道密码从首字母开始,之后有 6 个数字。 (稍后我必须用另一种方法创建其他循环,并比较哪种方法与多线程更快找到密码,但现在这并不重要)
我有一个在多线程中工作的循环,并且为每个初始添加一个从 000000 到 999999 的数字字符串并检查它是否等于正确的密码。 我不知道为什么永远不会调用“if”的指令。有人知道如何提供帮助吗? 如果我找到正确的密码,如何停止其他线程?
executorService= Executors.newFixedThreadPool(30);
String finalCorrect = correct;
for(String x : inicials){
executorService.submit(()->{
for(int count=0;count<999999; count++){
if(finalCorrect.equals(x+String.format("%06d", count).trim())){
System.out.println("Correct password is: "+x+String.format("%06d", count).trim());
System.out.println("The really password is: "+ finalCorrect);
break;
}
}
}
);
}
executorService.shutdown();
try {
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException x) {
System.out.println(x);
}
【问题讨论】:
-
initials中有什么内容?你能检查finalCorrect.startsWith(x)是否返回 true 吗? -
initials 是所有员工姓名首字母的列表。 finalCorrect.startsWith(x) 在整个循环中返回 false
-
那是错误,如果
finalCorrect的两个初始字符不在列表initials中,您将找不到它
标签: java multithreading for-loop if-statement