有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在现实生活中同步多线程程序中的方法有什么意义

我知道多线程和线程同步在java中是如何工作的,但最近在研究thread wait()和notify()方法时,我把一切都弄糊涂了,现在我想知道使方法同步的意义是什么
我了解到,“我们使用同步方法,以便其他线程无法访问同一对象上的代码块”。在这里,“在同一个对象上”对我来说似乎很不自然

如今,越来越多的程序采用面向对象的方法,因此它们倾向于使用对象完成所有工作,那么为什么我们要使用单个对象(间接地指前面提到的同一对象)来完成我们的工作呢

请用一个真实的例子向我解释这个概念。我能找到的唯一一个例子是旧的银行账户例子,丈夫和妻子有一个共同的账户,他们试图同时做一些修改。请举其他现实生活中的例子。谢谢
更新

我在github上添加了一些代码。在代码中,我无法创建taxi类的单个实例。每次我创建一个新线程时,都会创建一个新的taxi实例
这是我的code


共 (2) 个答案

  1. # 1 楼答案

    假设您希望在移动应用程序上预订出租车。所以在某一特定时刻,应用程序只能将该出租车分配给一位客户。因此,在这种情况下,您也需要同步,以便在事务完成后滑行状态保持一致

  2. # 2 楼答案

    在多线程程序中进行同步并不是必须的。这实际上取决于我们的用例

    我们将仅在对象具有shared mutable状态时同步语句块或方法,即对象在多个线程之间共享,并且其状态是可变的

    我们举一个简单的火车票例子。一列火车的座位数量有限,任何人都可以通过其网站预订座位。如果两人试图为同一列车预订车票,其中一人必须首先获取列车对象上的锁,预订车票并释放锁,而另一人必须等待锁释放。这样,第一个人对可用座位数所做的更改对下一个等待订票的人是可见的。如果没有同步,我们永远无法确定票证数量的可靠性

    所以我们只对Shared Mutable对象进行同步。如果您试图获取的对象是不可变的,则无需进行同步

    说到wait()notify(),它们是在多个线程之间进行通信的低级API。wait()的经典示例&;notify()是线程池。下面是Brian Goetz关于这些方法用法的一篇优秀的article

    希望这能说明问题