为什么线程不起作用?

时间:2016-10-08 07:31:51

标签: java multithreading

以下是我的以下代码:

private int counter = 0;

public void incC() {
    counter++;
    System.out.println("Counter is: "+counter +  "  "+Thread.currentThread().getName());
}

public void printC() {
    System.out.println("Counter  is: "+counter +  "  "+Thread.currentThread().getName());
}

 public static void main(String args[]) throws Exception {
       Stuff stuff = new Stuff();

        Thread t1 = new Thread(() -> {
           stuff.incC();
       });

       Thread t2 = new Thread(() -> {
           stuff.printC();
       });

       t1.start();
       t2.start();

       t1.join();
       t2.join();
  }
}

这是我的输出:

Counter  is: 1  Thread-1
Counter is: 1  Thread-0
  • 首先调用t1.join()。那么线程t2应该等待线程t1死掉吗?
  • 线程t2如何在t1之前输出?

3 个答案:

答案 0 :(得分:3)

t1.join()使当前线程等待线程t1死亡。它对任何其他线程的时序没有影响,但对当前线程没有影响。您已经启动了两个线程,它们将同时运行,没有排序约束。

我还应该注意,启动两个线程只让一个人等待对方的死亡就会失去多线程的目的。

答案 1 :(得分:0)

  1. join()强制等待t1的当前(在您的情况下是主要的)线程死亡,因此t2继续工作
  2. 线程执行顺序不固定,因为它们并行工作

答案 2 :(得分:0)

两个线程并行工作,因此无法保证在您的情况下首先完成哪个线程。

如果你想首先完成一个特定的线程,你必须启动它并与主线程连接,然后启动并加入第二个线程,如下所示。

    t1.start();
    t1.join();

    t2.start();
    t2.join();

设置线程的名称以便更好地理解。

同时更改您的问题,因为您的主题正常运行。