有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java何时同步变量?

我应该何时同步变量

我想只有一个线程可以访问它;这是否意味着我不需要同步它

synchronized(variableName){

}

共 (4) 个答案

  1. # 1 楼答案

    如果性能是一个重要的考虑因素,我最近读到:

    void synchronized method() {
    ...
    }
    

    快于:

    void method() {
        synchronized (this) {
        ...
        }
    }
    

    在当前JVM中。YMMV

  2. # 2 楼答案

    如果只有一个线程访问它,则不需要同步它

    当您希望保护变量不受多线程同时更新的影响时,应该在多线程环境中进行同步

  3. # 3 楼答案

    同步的原因是当一个代码块可能被多个线程访问时。使用以下命令

    synchronized(whateverObject)
    { //...
     // code to be accessed by one thread here...
    }
    

    确保代码块仅由一个线程访问。所有其他线程将阻塞,直到第一个线程完成

    除非代码是多线程的,否则不需要使用synchronized关键字

  4. # 4 楼答案

    根据您的代码片段,您正在上同步variableName,而不是在同步variableName。这两者之间有很大的区别。如果您想要保护variableName,那么应该在synchronized块中访问它。像这样:

    synchronized(syncVar){
         variableName = /* some operation which will modify the state of variableName */
    }
    

    这里syncVar是一个变量,在该变量上同步variableName并防止同时访问

    此外,如果只有一个线程访问该变量,则无需同步。这可能是一个性能的打击