循环如何退出?

用户名

因此,我进行了测试,结果对我来说毫无意义。让我们考虑以下代码:

ThreadStuffCounter counter_1 = new ThreadStuffCounter(1);
while(counter_1.doProceed) {
    Thread.sleep(500);
    Thread thread = new Thread(counter_1);
    thread.start();
}

Runnable如下:

package test;

public class ThreadStuffCounter implements Runnable {
    public volatile boolean doProceed = true;
    private int id = -1;
    public volatile int i = -1;
    public ThreadStuffCounter(int id) {
        this.id = id;
    }

    @Override
    public void run() {
        for (i = 0; i < 10; i++) {
            System.out.println("i = " + i + " in runnable id = " + id);
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        doProceed = false;
    }
}

线程之间仅共享一个计数器实例。启动另一个线程所需的时间更少,然后对线程进行一个增量就可以了counter.doProceed,据我所知,永远不要将其设置为false,并且循环应无限期地继续下去,直到遇到内存不足的异常并且无法启动任何更多线程为止。

循环如何退出?

编辑:修改代码,以确保下面的答案是正确的。

package test;

public class ThreadStuffCounter implements Runnable{

public volatile boolean doProceed = true;
private int id = -1;
volatile int i = -1;
public ThreadStuffCounter(int id){
    this.id = id;
}

@Override
public void run() {
    i = 0;
    while (i < 10){
        System.out.println("i = " + i + " in runnable id = " + id +
                "; from thead id = " + Thread.currentThread().getId());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        i++;
    }
    ThreadStuff.doProceed = false;
}

}

package test;

public class ThreadStuff {

public static volatile boolean doProceed = true;

public static void main (String[] args) throws InterruptedException{
    ThreadStuffCounter counter_1 = new ThreadStuffCounter(1);
    while(doProceed){
        Thread.sleep(500);
        Thread thread = new Thread(counter_1);
        thread.start();
    }
}

}

同样,如果您要为i <n运行,则似乎需要n个线程。但是,您需要许多线程,以便n个线程同时增加。

路易吉·门多萨

当至少一个线程执行for循环并且i值大于或等于10时,doProceed变量将为false(是的,可能会发生),并且由于是volatile这样,将停止执行while创建和启动新线程循环。然后,由所有线程来完成for循环代码,然后完成它们的执行。这似乎是因为在您的环境中启动新线程的时间比当前线程完成其执行的时间慢。另外,请注意,几个线程可能会增加i值,这将加速for循环执行。

如果您循环到一个更高的值(未测试),则可能会生成一个无限循环,并且当没有足够的资源来创建和启动新线程时,应用程序将中断。


在使用限制10、50和1000进行了一些测试之后,我注意到当您拥有一个更大的值时,由于创建了许多线程,因此它们全部同时增加的值,ii逐渐开始逐渐接近该限制。for循环中设置的值我当前环境的描述:

  • 操作系统:Windows 7 Professional 64 bits
  • 处理器:Intel(R)CoreTM i5-2520M CPU @ 2.50GHz(4 CPU),〜2.5GHz
  • 内存:8192MB

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何退出循环

来自分类Dev

如何退出while循环?

来自分类Dev

我如何退出循环?

来自分类Dev

如何退出“是”循环

来自分类Dev

如何退出while循环

来自分类Dev

如何通过按键退出循环

来自分类Dev

如何退出游戏循环?

来自分类Dev

如何批量退出for / f循环?

来自分类Dev

如何退出后台线程循环?

来自分类Dev

如何正确退出while循环?

来自分类Dev

如何基于C中函数的输入退出退出while循环?

来自分类Dev

如何在python中退出while循环?

来自分类Dev

如何防止NodeJS事件循环退出?

来自分类Dev

如何在撬中退出循环

来自分类Dev

如何避免return语句并退出for循环?

来自分类Dev

代码成功后如何退出try循环?

来自分类Dev

出现错误时如何退出循环

来自分类Dev

如何在Python中退出循环?

来自分类Dev

如何提前退出Array.forEach循环?

来自分类Dev

如何退出while(scanf_s ...)循环?

来自分类Dev

如何退出队列中的while循环?

来自分类Dev

如何从父终端的无限循环中退出?

来自分类Dev

代码成功后如何退出try循环?

来自分类Dev

如何使用户退出while循环

来自分类Dev

如何使用条件测试退出while循环?

来自分类Dev

如何退出这个井字游戏循环?

来自分类Dev

满足我的条件时如何退出循环?

来自分类Dev

ajax调用后如何退出循环

来自分类Dev

Java-如何退出While循环中间循环