Java 中的同步如何工作
How does synchronization work in Java
下列说法正确的是:
“两个不同 类 中的两个同步方法之间不应有任何线程干扰。因此它们可以 运行 并发而不会出现任何问题。”
感谢您的宝贵时间
你有点误解了这个概念。当两个(或多个)线程同时尝试对同一数据进行更改,或者其中一个线程尝试读取数据而另一个线程尝试更改数据时,就会发生冲突。
当两个线程试图同时更改共享资源时,会出现竞争条件。查看此 link 以了解有关 Race Condition.
的更多信息
为了防止此类问题,您需要保护共享资源以防止同时更改。互斥量和信号量是为此目的而发明的:当一个线程当前正在对其进行更改时,为其他线程锁定共享资源。为此,Java 使用了 synchronized 关键字。您可以使用 link.
阅读更多关于 Synchronized in Java 的信息
请注意,使用 synchronized 关键字不会消除所有与同步相关的问题,但它是一个很好的起点。
这太含糊了。几点建议:
"how does synchronization work in Java":有几个机制,问题似乎是关于 synchronized
关键字。这是通过标记 "critical sections" 不能同时由多个线程执行的,并让线程 "lock" 在该部分中时成为监视器对象(以便所有其他线程等待)来工作.
synchronized
方法在对象实例上同步(如果是静态方法,则为 class 对象)。因此,不同 classes 中的方法不会以这种方式相互同步。他们将同时运行。
您可以使用 synchronized
关键字来同步任何其他监视器对象上的块。这样,不同 classes 中的方法仍然可以相互同步。
"can run concurrently without problems" 不能仅通过同步(或不同步)来保证。您需要查看这些方法(直接或间接)尝试访问哪些可变状态(以及其他谁做同样的事情)以了解需要什么样的并发控制。
下列说法正确的是:
“两个不同 类 中的两个同步方法之间不应有任何线程干扰。因此它们可以 运行 并发而不会出现任何问题。”
感谢您的宝贵时间
你有点误解了这个概念。当两个(或多个)线程同时尝试对同一数据进行更改,或者其中一个线程尝试读取数据而另一个线程尝试更改数据时,就会发生冲突。
当两个线程试图同时更改共享资源时,会出现竞争条件。查看此 link 以了解有关 Race Condition.
的更多信息为了防止此类问题,您需要保护共享资源以防止同时更改。互斥量和信号量是为此目的而发明的:当一个线程当前正在对其进行更改时,为其他线程锁定共享资源。为此,Java 使用了 synchronized 关键字。您可以使用 link.
阅读更多关于 Synchronized in Java 的信息请注意,使用 synchronized 关键字不会消除所有与同步相关的问题,但它是一个很好的起点。
这太含糊了。几点建议:
"how does synchronization work in Java":有几个机制,问题似乎是关于
synchronized
关键字。这是通过标记 "critical sections" 不能同时由多个线程执行的,并让线程 "lock" 在该部分中时成为监视器对象(以便所有其他线程等待)来工作.synchronized
方法在对象实例上同步(如果是静态方法,则为 class 对象)。因此,不同 classes 中的方法不会以这种方式相互同步。他们将同时运行。您可以使用
synchronized
关键字来同步任何其他监视器对象上的块。这样,不同 classes 中的方法仍然可以相互同步。"can run concurrently without problems" 不能仅通过同步(或不同步)来保证。您需要查看这些方法(直接或间接)尝试访问哪些可变状态(以及其他谁做同样的事情)以了解需要什么样的并发控制。