使用for-loop内部线程不会匹配类似的while循环行为

时间:2017-06-10 21:54:24

标签: java multithreading for-loop while-loop

我刚刚开始在Java中使用线程,而且我在线程中使用for循环时遇到了问题。

当我在线程中使用for循环时,由于某些原因我无法看到我发送到屏幕的输出。

当我使用while循环时,它就像一个魅力。

非工作代码如下:

public class ActionsToPerformInThread implements Runnable {
    private String string;

    public ActionsToPerformInThread(String string){
        this.string = string;
    }

    public void run() {
        for (int i = 1; i == 10 ; i++) {
            System.out.println(i);
        }
    }
}

致电代码:

public class Main {

    public static void main(String[] args) {
        Thread thread1 = new Thread(new ActionsToPerformInThread("Hello"));
        Thread thread2 = new Thread(new ActionsToPerformInThread("World"));
        thread1.start();
        thread2.start();
    }
}

我的问题是:为什么当我用while-loop替换for-loop并尝试将相同的输出打印到屏幕上时它不起作用?

我尝试调试它,但似乎程序在到达打印部分之前停止了(没有异常或错误)。

3 个答案:

答案 0 :(得分:2)

 for (int i = 1; i == 10 ; i++) {
        System.out.println(i);
    }
你的意思是?

i <= 10

i == 10是1 == 10.它总是假的。

答案 1 :(得分:2)

你的 for loop 中有一个愚蠢的错字:

for (int i = 1; i == 10 ; i++) {
    ...
}

应该读作:

for (int i = 1; i <= 10 ; i++) {
    ...
}

答案 2 :(得分:0)

典型的 for循环在Java中如下所示:

   //pseudo code
    for( variable ; condition ; increment or decrement){
       //code to be executed...
    }

工作原理:

  1. 首先声明variable(也可以在循环外声明)
  2. 然后检查您的condition,如果它是true,则执行循环内的代码,否则如果第一次失败则甚至不会输入循环。
  3. 然后你的increment or decrement完成,然后第二步再次发生...... 这会反复进行,直到conditionfalse,然后循环退出。
  4. 在您的情况下,conditioni == 10,当然,由于i仍然是1并且尚未更改,因此第一次检查时失败了,因此for-loop中的代码甚至没有执行,根本没有输入循环。

    要解决此问题:您需要将condition更改为i <= 10。通过这样做,你告诉循环“只要i小于OR等于10就继续循环。”