在我的代码中:
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
.
因为上下文切换。 sleep() 不是保证的时间量,但受制于系统中发生的其他事情。它会尝试回来,但可能不会成功。另外,可能会在 IDE 中舍入。
程序运行时间也负责。您已将 6 秒用于线程睡眠。所以下一个线程将被执行。因此,发生了上下文切换。