【发布时间】:2018-01-15 07:34:02
【问题描述】:
Q.1 我试图同时运行两个线程,但这里它是按顺序打印值。例如,它打印 0 然后 1 再打印 0 然后 1。如果线程同时运行,那么它不应该打印 0 0 然后 1 1。
Q.2 它给出的输出类似于 10、11,然后是 0、1、0、1。当它首先打印 10 和 11 时。这是否意味着线程 t1 和 t2 尚未启动,即使程序控制首先转到 t1.start() 和 t2.start()。
public class Main implements Runnable
{
int x;
public void run()
{
for(int i = 0; i < 2; i++)
{
System.out.println(x++);
}
}
public static void main(String[] args)
{
Thread t1 = new Thread(new Main());
Thread t2 = new Thread(new Main());
t1.start();
t2.start();
int y = 10;
for(int i = 0; i < 2; i++)
{
System.out.println(y++);
}
}
}
【问题讨论】:
-
无法保证线程的执行顺序,因此无法预测您将获得输出的顺序。它可以是 0、1、0、1 或 0、0、1、1。
-
基本上,当您谈论多线程程序时,您无法预测它们的执行方式和时间。你也不能只使用
println(),因为它是缓冲的,不反映程序的执行。
标签: java multithreading java-threads