synchronized方法不将int作为其有效参数?

时间:2013-11-27 05:41:57

标签: java multithreading

public void run(){
        if(Singleton.getBuffer()<Singleton.getLimit()){
            synchronized(Singleton.getBuffer()){
                    Singleton.setBuffer(Singleton.getBuffer()+1);
                    notify();
            }
        }

在这段代码中我无法获得静态volatile int缓冲区的锁定..它说int不是同步方法的有效类型语句

4 个答案:

答案 0 :(得分:5)

您不能将原语用作内部锁。相反,使用:

synchronized(Singleton.class)

答案 1 :(得分:1)

这应该按预期工作......

    synchronized(this){
            Singleton.setBuffer(Singleton.getBuffer()+1);
            notify();
    }

答案 2 :(得分:0)

synchronized 语句必须指定提供内部锁定的对象。您不能使用原始类型来锁定同步语句。

阅读Intrinsic Locks and Synchronization文档,该文档解释得非常好。

答案 3 :(得分:0)

对于拥有锁,您需要一个对象,因此您不能将原始类型用于同步块。 在您的情况下,如果您想要静态/全局锁定,可以使用以下内容:

synchronized(String.valueOf(i).intern()){
}