gpt4 book ai didi

java - 多线程执行顺序

转载 作者:行者123 更新时间:2023-12-03 23:10:58 25 4
gpt4 key购买 nike

假设我们有这样的场景:

class Stack{

public void main{

ChildThread1 t1 = new ChildThread1;
ChildThread1 t2 = new ChildThread1;
ChildThread1 t3 = new ChildThread1;

//then we make some ChildThread2 objects and some ChildThread3 objects

ChildThread2 s1 = new ChildThread2;
//...

ChildThread3 v1 = new ChildThread3;
//...

//now we let all threads start in mix order
t1.start();
v1.start();
//...

SOP("All threads are ready");

//then we let them run with join()
t1.join();
t2.join();
t3.join();

s1.join();
//...

v1.join();
//...

每种类型的线程在运行时都会打印自己唯一的语句。

我注意到每次执行程序时,输出总是不同的。例如,来自 ChilThread1 t1 的语句将在输出的中间打印而不是开始(因为 t1 首先启动)或者语句“所有线程都准备好了”将在线程执行中间弹出(例如:ChildThread2 是“所有线程都准备好了” ' 运行 )

所以我试图找到答案,我找到了这个网站: http://www.avajava.com/tutorials/lessons/how-do-i-use-threads-join-method.html
该网站基本上说当您使用 start() 时不能保证执行顺序

那么我是否正确地假设这种奇怪的打印顺序是因为 start() 不保证执行顺序?这个原因是否也适用于“所有线程都准备就绪”的问题?

最佳答案

线程的全部意义在于它们可以并发执行。如果您想确保完成事情的特定顺序,您要么必须放弃使用线程,要么使用显式同步。

So am I right to assume that this weird order of prints is because start() does not guarantee order of execution?



这是正确的。当您 start一个线程,主线程和新创建的线程之间基本上存在竞争条件。这意味着无法说明两个线程之间发生的相对顺序。如果要确保特定顺序,请使用同步。

关于java - 多线程执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13228164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com