在下面的代码段中,我创建了 3 个线程并给它们一个数字来跟踪哪个是哪个。当我执行程序时,除了线程是随机排序的之外,输出与预期的一样。我本来希望它们以与创建和启动相同的顺序出现(1-2-3),但每次我都会得到一个乱码。
为什么是这样?
一个PrintTask
对象创建一个随机sleep
时间并在它完成睡眠时打印一条消息。代码很简单,所以我不会发布它。当我使用 anExecutorService
而不是单独的线程对象时,也会发生同样的事情。
public static void main(String[] args) {
Thread thread1 = new Thread(new PrintTask("Thread 1"));
Thread thread2 = new Thread(new PrintTask("Thread 2"));
Thread thread3 = new Thread(new PrintTask("Thread 3"));
System.err.println("Starting threads");
thread1.start();
thread2.start();
thread3.start();
System.err.println("Threads started, main ends\n");
}
输出:
线程 2 为 4907 休眠
线程 1 为 4779 休眠
线程 3 为 537 休眠
线程 3 完成睡眠
线程 1 已完成睡眠
线程 2 完成睡眠