繁体   English   中英

Java中的同步方法

[英]Synchronized Methods in Java

只是想检查以确保我理解这一点。 同步方法不会创建线程,对吗? 它只确保在同一进程(即JVM)中的一个线程正在使用它时,没有其他线程正在调用此方法,对吧?

同步方法不会创建线程,对吗?

对。

它只确保在同一进程(即JVM)中的一个线程正在使用它时,没有其他线程正在调用此方法,对吧?

对。

有关更多信息,请阅读同步方法 我还建议阅读Java Concurrency in Practice

这大多是正确的。 调用synchronized方法不会产生新线程。 它只是让其他线程在尝试为该对象的该实例调用任何其他同步方法时阻塞。

要记住的关键是,类的所有同步方法都使用相同的锁。

是。

同步块还有另一个重要的作用:当线程进入同步块时,它会看到访问该块的前一个线程(或与同一个锁同步的另一个块)所做的值的更改。

基本上在多核cpu上,每个线程在其核心上都有自己的内存缓存:每个核心都有相同变量的副本,每个核心的值可能不同。 当存在同步操作时,JVM确保将变量值从一个内存缓存复制到另一个内存缓存。 进入同步块的线程然后看到前一个线程“更新”的值。

正如mre所建议的那样,如果你真的想了解多线程并学习最佳实践,Java Concurrency in Practice是一个很好的参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM