Ikk*_*kky 0 java static class synchronized
我正在创建一个静态类,它将保存一些带有信息的向量.我必须使它同步,以便在有人正在编辑或从向量中读取时将锁定该类.
做这个的最好方式是什么?
是否有足够的功能在类内部同步,如下所示:
public synchronized insertIntoVector(int id)
{
}
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
首先,您需要准确定义"静态类"的含义.起初,我认为你的意思是所有方法都是静态的(这并不是为了实例化) - 但是你的代码片段暗示情况并非如此.
在任何情况下,类中的synchronized方法等同于synchronized(this)它们是实例方法,或者synchronized(TheContainingClassName.class)它们是静态方法.
如果您要么使用所有静态方法创建一个不可实例化的类,要么创建一个将充当单例的类,那么同步该类的每个方法将确保只有一个线程可以一次调用方法.
如果可能的话,尽量确保你的方法是原子的; 对其他线程的调用可以由其他线程进行交错,因此,如果另一个线程调用inbetween,则getFoo()调用后跟a setFoo()(可能在递增foo变量之后)可能不会产生预期的效果setFoo().最好的方法是有一个方法,如incrementFoo(); 或者(如果这不可能)您可以发布同步详细信息,以便您的调用者可以在整个调用序列期间手动保持对类/实例的锁定.