Java 为什么线程不工作?
以下是我的代码:Java 为什么线程不工作?,java,multithreading,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.cu
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
t1.join()
使当前线程等待线程t1
死亡。它对除当前线程外的任何其他线程的计时都没有影响。您已经启动了两个线程,它们将在没有排序约束的情况下并发运行
我还应该注意到,启动两个线程只是为了让一个线程等待另一个线程的死亡,这违背了多线程的目的
join()
两个线程并行工作,因此不能保证在您的情况下哪个线程将首先完成 如果你想让一个特定的线程先完成,你必须启动它并将其与主线程连接,然后启动并连接第二个线程,如下所示
t1.start();
t1.join();
t2.start();
t2.join();
为线程设置名称,以便更好地理解
由于线程工作正常,请更改您的问题。否,
join()
使当前线程(本例中的“主”线程)等待t1
和t2
完成。换句话说:线程工作正常。如果要等待t1
的终止,然后启动t2
,则必须在t1.join()
之后调用t2.start()
…有什么问题吗?线程可能正在工作,您需要同步访问计数器
我发现这些新手经常误解“当前线程”的含义。首先,当您有八个CPU都在启动时,哪个线程是“当前”线程?然后,再加上noob通常没有意识到主线程是线程这一事实。他们提出了这样的想法,当前线程就是“我”刚刚创建并开始的线程。我喜欢用这样的话来解释join()
,“t1.join()
对t1
没有任何作用;它只是等待t1
死亡。”