public void run(){
if(Singleton.getBuffer()<Singleton.getLimit()){
synchronized(Singleton.getBuffer()){
Singleton.setBuffer(Singleton.getBuffer()+1);
notify();
}
}
在这段代码中我无法获得静态volatile int缓冲区的锁定..它说int不是同步方法的有效类型语句
答案 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()){
}