gpt4 book ai didi

java - Thread.yield() 的使用; java

转载 作者:行者123 更新时间:2023-12-01 08:14:54 35 4
gpt4 key购买 nike

谁能解释一下这段代码:

public class Main implements Runnable{

private int i;
public synchronized void run() {
System.out.print("i = "+ i +"\n");
if (i % 5 != 0) {
i++;
}
for (int x = 0; x < 5; x++, i++) {
if (x > 1) {
Thread.yield();
}
}
}

public static void main(String[] args) {
Main n = new Main();
for (int x = 100; x > 0; --x) {
new Thread(n).start();
}
}
}

以及输出如何

i= 0
i= 5
i= 10
i= 15
i= 20
.
.
.
i= 499

最佳答案

底部循环创建 100 个线程。每个线程都立即运行,与其他线程并行。在每个线程中,

  • 首先,打印共享属性“i”的当前值
  • 如果 i 不能被 5 整除,则增加一次
  • 然后执行一个循环,最多执行 5 次。最后 3 次执行时,它会让步给其他线程。每次执行此循环时,都会递增共享变量“i”

因此,如果 i 能被 5 整除,则 i 增加 5 倍,如果不能被 5 整除,则增加 6 倍。但是,run() 方法是同步的。 因此,当其中一个线程已经执行时,不允许其他线程执行:您的程序实际上是单线程的,yield() 被忽略(没有其他线程可以执行),并且输出相同至

for (int i=0; i<500; i+= 5) System.out.println(i);
System.out.println(499);

删除同步以查看改变输出的各种竞争条件。

关于java - Thread.yield() 的使用; java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293334/

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