在我的代码中:
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
。
答案 0 :(得分:2)
由于上下文切换。 sleep()不是保证的时间量,但受系统中其他事情的影响。它会尝试回来,但可能不会成功。此外,可能在IDE中进行舍入。
答案 1 :(得分:0)
程序运行时间也要负责。你有6秒的线程睡眠。所以下一个线程将被执行。因此发生了上下文切换。