gpt4 book ai didi

java - 同步块(synchronized block)不会锁定

转载 作者:行者123 更新时间:2023-11-29 03:17:12 24 4
gpt4 key购买 nike

有雪球在下落。当雪球到达某个方 block (125<=y<=260)时,该方 block 一次只能允许一个雪球通过。我的代码中的问题是,它们都传递了那个 block 。它不会锁定。

我的代码有什么问题?请帮忙。

public void run()   {
while(true){
synchronized(this){
if((y>=125)&&(y<=260)){
y+=1;
}
}

if(y>=480){
x = randomGenerator.nextInt(400);
y = 0;
}else{
y=y+1;
}
}
}

最佳答案

如果每个雪球都是它自己的实例,每个雪球都会自己同步 (this),这将毫无用处。为了使这段代码按照您想要的方式工作,您必须拥有一个所有实例都可以同步的共享资源。一个很好的例子是类对象本身:

public void run() {
while(true){
synchronized(Snowball.class){
if((y>=125)&&(y<=260)){
y+=1;
}
}

if(y>=480){
x = randomGenerator.nextInt(400);
y = 0;
}else{
y=y+1;
}
}
}

关于java - 同步块(synchronized block)不会锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821149/

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