Java中的同步方法

时间:2011-09-01 15:23:09

标签: java multithreading synchronized

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

3 个答案:

答案 0 :(得分:21)

  

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

右。

  

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

右。

有关详细信息,请阅读Synchronized Methods。我还建议您阅读Java Concurrency in Practice

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

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

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