JAVA 中的嵌套循环(线程)

Nesting loops (Threads) in JAVA

正如我的标题所述,我需要嵌套 for 循环(我不确定嵌套是否是我正在寻找的正确词,但我需要一个 for 循环,在另一个循环中)

我目前的密码是

public class Main {
    private static String[] passwords = {"zero", "one", "two", "three", "four"};
    public static void main(String[] args) {
        int threadds = 10;
        Thread[] threads = new Thread[threadds];
        for (int j = 0; j < passwords.length; j++) {
            for (int i = 0; i < passwords.length; i++) {
                ClaimSnipe NS = new ClaimSnipe();
                NS.password = String.valueOf(i);
                NS.i = i;
                NS.DropTome = System.currentTimeMillis() + 1000;
                Thread t = new Thread(NS);
                threads[i] = t;
                threads[i].setName(String.valueOf(i + 1));
                NS.ThreadName = String.valueOf(threads[i].getName());
                threads[i].start();
            }
        }

    }
}

class ClaimSnipe implements Runnable {
    private volatile boolean exit = false;

    public String ThreadName;
    public String password;
    public int i;

    public long DropTome;

    public void stop() {
        exit = true;
    }

    @Override
    public void run() {
        long unixTimern = System.currentTimeMillis();
        while (unixTimern < (DropTome) - 1000) {
            unixTimern = System.currentTimeMillis();
        }
        System.out.println("Thread = " + ThreadName + "; i = " + i);
        stop();
    }
}

它给出的结果是

Thread = 0; i = 0
Thread = 0; i = 1
Thread = 0; i = 2
Thread = 0; i = 3
Thread = 0; i = 4
Thread = 1; i = 0
Thread = 1; i = 1
Thread = 1; i = 2
Thread = 1; i = 3
Thread = 1; i = 4
Thread = 2; i = 0
Thread = 2; i = 1
Thread = 2; i = 2
Thread = 2; i = 3
Thread = 2; i = 4
Thread = 3; i = 0
Thread = 3; i = 1
Thread = 3; i = 2
Thread = 3; i = 3
Thread = 3; i = 4
Thread = 4; i = 0
Thread = 4; i = 1
Thread = 4; i = 2
Thread = 4; i = 3
Thread = 4; i = 4

Process finished with exit code 0

^^^ What i want

-----------------------------------------------------

Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 3; i = 2



Process finished with exit code 1

^^^ What i get...
Thread = 0; i = 0
Thread = 0; i = 1
Thread = 0; i = 2
Thread = 0; i = 3
Thread = 0; i = 4
Thread = 1; i = 0
Thread = 1; i = 1
Thread = 1; i = 2
Thread = 1; i = 3
Thread = 1; i = 4
Thread = 2; i = 0
Thread = 2; i = 1
Thread = 2; i = 2
Thread = 2; i = 3
Thread = 2; i = 4
Thread = 3; i = 0
Thread = 3; i = 1
Thread = 3; i = 2
Thread = 3; i = 3
Thread = 3; i = 4
Thread = 4; i = 0
Thread = 4; i = 1
Thread = 4; i = 2
Thread = 4; i = 3
Thread = 4; i = 4

Process finished with exit code 0

^^^ What i want

-----------------------------------------------------

Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 3; i = 2
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 1; i = 0
Thread = 2; i = 1
Thread = 4; i = 3
Thread = 5; i = 4
Thread = 3; i = 2



Process finished with exit code 1

^^^ What i get...

我曾尝试更改我调用 ClaimSnipe NS 的位置,但所做的一切都是成功的,因此只使用了一个线程

你的 14 threads[i].setName(String.valueOf(i + 1));

  • 首先将您的for循环计数器变量加1并引用您的INNER FOR循环的循环计数器变量。

应该是:

threads[i].setName(String.valueOf(j));

  • 指的是你的 OUTER FOR 循环的循环计数器变量,也不会增加 1.

此更改将调整您现有的代码以获得您想要的输出。我希望这对你有用。