同步如何在Java中工作

时间:2018-02-12 10:08:29

标签: java multithreading synchronization synchronized

以下陈述是正确的:

"两个不同类中的两个同步方法之间不应存在任何线程干扰。因此,它们可以同时运行而不会出现任何问题。"

感谢您的时间

2 个答案:

答案 0 :(得分:1)

你误解了这个概念。当两个(或多个)线程同时尝试对相同数据进行更改,或者当其中一个线程尝试读取数据而另一个线程尝试更改数据时,就会发生冲突。

当两个线程同时尝试更改共享资源时,会发生争用情况。请查看此链接,详细了解Race Condition

为了防止出现此类问题,您需要保护共享资源以进行同步更改。为此目的发明了互斥锁和信号量:当一个线程当前正在对其进行更改时,锁定其他线程的共享资源。为此,Java使用synchronized关键字。您可以使用链接了解有关Synchronized in Java的更多信息。

请注意,使用synchronized关键字不会消除所有与同步相关的问题,但这是一个很好的起点。

答案 1 :(得分:1)

这太模糊了。一些指示:

  • “Java中的同步工作原理”:有几种机制,问题似乎与synchronized关键字有关。这通过标记“关键部分”来实现,这些“关键部分”不能同时由多个线程执行,并且让线程在该部分中“锁定”监视器对象(以便所有其他线程等待)。

  • synchronized方法在对象实例(或静态方法的情况下为类对象)上进行同步。因此,不同类中的方法不会以这种方式彼此同步。它们将同时运行。

  • 您可以使用synchronized关键字来同步任何其他监视器对象上的块。这样,不同类中的方法仍然可以彼此同步。

  • “可以同时运行而没有问题”只是通过一些同步(或缺少同步)不能保证。您需要查看这些方法(直接或间接)尝试访问哪些可变状态(以及还有谁做同样的事情),以查看哪种类型的并发控制是必要的。