为了更好地理解 Java 中的线程,我编写了以下代码
public class SimpleRunnableTest {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread t1 = new Thread(new TT1());
t1.start();
Thread t2 = new Thread(new TT2());
t2.start();
t2.join();
t1.join();
long end = System.currentTimeMillis();
System.out.println("end-start="+(end-start));
}
}
class TT1 implements Runnable {
public void run(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class TT2 implements Runnable {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
这个想法是,如果我在 Thread 中按顺序运行,所消耗的Thread.sleep(5000)
时间将为 但我的问题是:Thread.sleep(1000)
main
6 sec
5 sec
为什么结果还在5 sec
单核CPU机器上?当然使用了Threading,但不就是通过时分复用模拟线程吗?
我对时分复用的理解是:假设Thread.sleep(5000)
是任务A,Thread.sleep(1000)
是任务B,我们可以将其分解为:A1,A2,A3;B1、B2
顺序只是:A1,A2,A3,B1,B2
时分复用线程就是:A1、B1、A2、B2、A3
如果是,为什么第一个花费 6 秒,而第二个只花费 5 秒?
我是这里的基地吗?