gpt4 book ai didi

java - java中的线程和同步

转载 作者:行者123 更新时间:2023-12-01 10:28:34 26 4
gpt4 key购买 nike

考虑下面的线程同步方法和同步块(synchronized block)代码

public class ThreadSynchronizationPartI {
public static int myValue=1;
public static void main(String [] args)
{
Thread t=new Thread(()->
{
while(true)
{
updateBalance();
}
});
t.start();

t=new Thread(()->{
while(true)
{
monitorBalance();
}
});
t.start();
}
public static synchronized void updateBalance(){
System.out.println("start "+myValue);
myValue = myValue + 1;
// myValue = myValue - 1;
System.out.println("end "+myValue);

}
public static synchronized void monitorBalance(){
int b=myValue;
if(b>1)
{
System.out.println("B is greater than 1 by"+(b-1));
System.exit(1);
}
}
}

为什么它会给出以下输出: 开始 1 结束2 开始2 结束 3 开始 3 结束 4 开始 4 结束5 开始 5 结束 6 开始 6 结束 7 开始 7 结束 8 B 大于 1 × 7

谁能解释一下吗?

最佳答案

程序的执行将从main()开始。最初 myValue 的值为 1,并且将创建一个新线程 t。直到条件为真时,才会执行 while 循环。当控件到达 updateBalance() 时,它将跳转到该方法,并且 println() 将打印 myValue 的值,即 1。因此输出将是:start 1 然后它将增加myValue 的值变为 +1,因此下一个 println() 会将输出打印为:end 2。当 while 循环中下一个线程的条件为真时,控制权将转移到那里。将调用 monitorBalance() 并将 b 初始化为 myValue 的值。当条件 b>1 计算结果为 true 时,它​​将打印:B isgrand 1 by (b-1)

关于java - java中的线程和同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219931/

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