[英]Synchronized block won't lock
有下降的雪球。 当雪球到达某个障碍物(125 <= y <= 260)时,该障碍物一次只能允许一个雪球通过。 我的代码中的问题是,它们都通过了该块。 它不会锁定。
我的代码有什么问题? 请帮忙。
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;
}
}
}
您可以将类级同步用于全局锁定。
synchronized(YourClassName.class){
// Your code goes here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.