gpt4 book ai didi

java - 如何在java中停止我的线程

转载 作者:行者123 更新时间:2023-12-02 00:06:11 25 4
gpt4 key购买 nike

我有以下一段用于小型暴力破解的代码。我一直在尝试学习多线程,并且我的执行器不会停止。

private void generateThreads(int cores){
if (cores > Runtime.getRuntime().availableProcessors() || cores <= 0)
cores = Runtime.getRuntime().availableProcessors();

ArrayList<Future<?>> tasks = new ArrayList<Future<?>>(cores);
ExecutorService executor = Executors.newFixedThreadPool(cores);
final long step = 2000;

for (long i = 0; i < Long.MAX_VALUE; i += step){
while(tasks.size() > cores) {
for(int w = 0; w < tasks.size();w++){
if(tasks.get(w).isDone()){
tasks.remove(w);
break;
}
}

try{
Thread.sleep(0);
}

catch (InterruptedException e){
e.printStackTrace();
}
}
{
if (passwordFound == false){
tasks.add(executor.submit(new Runnable(){

public void run(){
String attempt;
while(true){
try {

Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
attempt = bf.toString();
bf.increment();
if (passwordCrack(attempt)){
crackedPassword.append(attempt);
passwordFound = true;
break;
}

}
}
}));
}
else
break;
}
}
executor.shutdownNow();
}

我认为 Thread.sleep(0) 将使线程能够捕获 InterruptedException,但我的线程继续永远运行。我该怎么做才能确保一旦找到密码,线程就会正确停止?

最佳答案

您还必须检查 passwordFound 变量:

// inside your run() method
while(!Thread.currentThread().isInterrupted() && !passwordFound) {
...
}
据我所知,不需要

Thread.sleep()

附注稍微修正了我的答案,以使其更清楚我的意思。

关于java - 如何在java中停止我的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13823819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com