线程中一个紧密持久的循环会大幅减慢其他线程吗?

时间:2015-10-18 21:04:58

标签: java multithreading

我的基本问题是,如果一个激烈的循环(不确定技术术语?标准循环? - 但是一个不产生任何东西的循环,没有调用Thread.sleep() - 就好了,花花公子到目前为止正如其他线程所关注的那样。

我尝试了一个例子,它似乎有效 - 尽管它吐出了太多的文字,但很难确切地知道它在做什么。但我要注意的主要事情是,如果有任何延迟,似乎没有。

所以我只想确认这样的代码,不调用任何Thread.Sleep()就可以了,不会对java应用程序的其他线程造成不必要的延迟。

public class TestThreadStability implements Runnable {

private final String name;

public TestThreadStability(String name) {

    this.name = name;
}

public static void main(String[] args) {
    new Thread(new TestThreadStability("a")).start();
    new Thread(new TestThreadStability("b")).start();
    new Thread(new TestThreadStability("c")).start();
    new Thread(new TestThreadStability("d")).start();
    new Thread(new TestThreadStability("e")).start();
    new Thread(new TestThreadStability("f")).start();
    new Thread(new TestThreadStability("g")).start();
}

@Override
public void run() {
    while(true) {
        if (name.equalsIgnoreCase("a"))
            while (true) {
                // this is ok? it doesn't adversely affect the other threads much?
            }
        else System.out.println(name);
    }
}

}

1 个答案:

答案 0 :(得分:1)

是的,如果您在一个核心中运行程序,它将导致延迟。

为什么你没有注意到它?线程按循环计划,这意味着如果有4个线程以全速运行,则每个线程获得25%。

如果你有1个全速线程和3个其他非常少工作的线程,那么全速线程大部分时间都会工作,但是会被迫屈服以允许其他线程完成它们的工作。