gpt4 book ai didi

java - 多线程程序输出不符合预期

转载 作者:行者123 更新时间:2023-12-02 01:19:26 27 4
gpt4 key购买 nike

多线程

public class RaceData {

public static void main(String[] args) {

class UnsafeSequence implements Runnable{
private int value = 0;

/** Returns a unique value. */

public void run(){

synchronized (this) {
value = value +1;
System.out.printf("Thread %s and Count value is %d \n",Thread.currentThread().getName(),value);
}
}
}

UnsafeSequence s = new UnsafeSequence();
Thread t1 = new Thread(s);
t1.setName("t1");
t1.start();
Thread t2 = new Thread(s);
t2.setName("t2");
t2.start();
Thread t3 = new Thread(s);
t3.setName("t3");
t3.start();
Thread t4 = new Thread(s);
t4.setName("t4");
t4.start();
Thread t5 = new Thread(s);
t5.setName("t5");
t5.start();
}
}

输出是:

Thread t1 and Count value is 1 
Thread t5 and Count value is 2
Thread t3 and Count value is 3
Thread t4 and Count value is 4
Thread t2 and Count value is 5

为什么计数值没有正确显示?抱歉,我正在修改我的问题,它与计数变量值无关,我预计线程 t2 在 t1 之后执行,因为我在 t1 之后启动了 t2,尽管我一个接一个地启动了线程,但这里的线程并未按顺序执行。

最佳答案

计数正确显示。每次线程访问 synchronized block 时,count 都会递增。

您不能期望线程按照启动的顺序访问synchronized block 。

关于java - 多线程程序输出不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8720374/

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