多线程运行时计算

时间:2014-02-20 12:20:30

标签: java multithreading sleep runnable

在我的代码中:

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 个答案:

答案 0 :(得分:2)

由于上下文切换。 sleep()不是保证的时间量,但受系统中其他事情的影响。它会尝试回来,但可能不会成功。此外,可能在IDE中进行舍入。

答案 1 :(得分:0)

程序运行时间也要负责。你有6秒的线程睡眠。所以下一个线程将被执行。因此发生了上下文切换。