java何时同步变量? 2 周,1 日 Questions & Answers 226 我应该何时同步变量 我想只有一个线程可以访问它;这是否意味着我不需要同步它 synchronized(variableName){ }
# 1 楼答案 如果性能是一个重要的考虑因素,我最近读到: void synchronized method() { ... } 快于: void method() { synchronized (this) { ... } } 在当前JVM中。YMMV
# 3 楼答案 同步的原因是当一个代码块可能被多个线程访问时。使用以下命令 synchronized(whateverObject) { //... // code to be accessed by one thread here... } 确保代码块仅由一个线程访问。所有其他线程将阻塞,直到第一个线程完成 除非代码是多线程的,否则不需要使用synchronized关键字
# 4 楼答案 根据您的代码片段,您正在上同步variableName,而不是在同步variableName。这两者之间有很大的区别。如果您想要保护variableName,那么应该在synchronized块中访问它。像这样: synchronized(syncVar){ variableName = /* some operation which will modify the state of variableName */ } 这里syncVar是一个变量,在该变量上同步variableName并防止同时访问 此外,如果只有一个线程访问该变量,则无需同步。这可能是一个性能的打击
# 1 楼答案
如果性能是一个重要的考虑因素,我最近读到:
快于:
在当前JVM中。YMMV
# 2 楼答案
如果只有一个线程访问它,则不需要同步它
当您希望保护变量不受多线程同时更新的影响时,应该在多线程环境中进行同步
# 3 楼答案
同步的原因是当一个代码块可能被多个线程访问时。使用以下命令
确保代码块仅由一个线程访问。所有其他线程将阻塞,直到第一个线程完成
除非代码是多线程的,否则不需要使用synchronized关键字
# 4 楼答案
根据您的代码片段,您正在上同步
variableName
,而不是在同步variableName
。这两者之间有很大的区别。如果您想要保护variableName
,那么应该在synchronized
块中访问它。像这样:这里
syncVar
是一个变量,在该变量上同步variableName
并防止同时访问此外,如果只有一个线程访问该变量,则无需同步。这可能是一个性能的打击