繁体   English   中英

同步块不会锁定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM