单声道同步?

Dor*_*ham 2 java multithreading synchronization

如果我有一个只有一个这样的语句的getter方法

public class NumberClass{
    int number;

    public int getNumber() {
        return number;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

多线程访问此方法,我是否必须同步此方法或没有必要,因为它只有一个语句?

Gra*_*ray 7

我必须同步这个[get]方法,否则没有必要,因为它只有一个语句?

它与1个或多个语句无关.这取决于该值是否已在另一个线程中更新,以及您是否希望所有线程都看到一致的值.

如果number字段在thread1中更新,则thread2可能会获得原始值或新值,具体取决于更新的同步方式.要使值适当地发布set和get方法都需要synchronized.

如果您只是尝试共享一个int值,那么将该number字段标记为volatile可行或使用一个AtomicInteger可靠地共享多个线程之间的值可能更合适.

private volatile int number;
Run Code Online (Sandbox Code Playgroud)

或使用:

private AtomicInteger number = new AtomicInteger();
Run Code Online (Sandbox Code Playgroud)