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.
此更改将调整您现有的代码以获得您想要的输出。我希望这对你有用。
正如我的标题所述,我需要嵌套 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.
此更改将调整您现有的代码以获得您想要的输出。我希望这对你有用。