代码之家  ›  专栏  ›  技术社区  ›  Sunrise

多线程中的运行时间计算

  •  0
  • Sunrise  · 技术社区  · 12 年前

    在我的代码中:

    public class thread1 implements Runnable {
    
    public static void main(String[] args) {
        thread1 d = new thread1();
        new Thread(d).start();
        Thread t1 = new Thread(d);
        t1.start();
    }
    
    @Override
    public void run() {
        for (int i = 0; i < 3; i++) {
            sleep1();
            sleep2();
        }
    }
    
    void sleep1() {
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    synchronized void sleep2() {
        try {
            Thread.sleep(1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
      }
    }
    

    我运行了我的代码并计算了它的运行时间。

    完成的最短时间为 7 秒。

    为什么?

    应该是6秒,因为 3loops * 2seconds = 6seconds .

    2 回复  |  直到 12 年前
        1
  •  2
  •   Thom    12 年前

    因为上下文切换。sleep()不是一个保证的时间量,但会受到系统中发生的其他事情的影响。它会试图回来,但可能不会成功。此外,可能在IDE中舍入。

        2
  •  0
  •   Siva Kumar    12 年前

    程序运行时间也有责任。线程睡眠时间为6秒。因此将执行Next线程。因此发生了上下文切换。