定义 同步意味着控制多个线程对共享资源的访问。 举例 现在我们将创建一个基本的银行应用程序,其中2个客户(线程)将尝试从单个银行账户存入/取出一笔金额 创建银行实体 Bank 类包含私有的Map实例变量accountNumberVsAccount。 它有一个方法 getAccount,它只是返回账号的BankAccount实例。 BankAccount 包含accountNumber 和 balance,和两个方法(withdraw和deposit)有没有进行更新的帐户余额。此外,如果余额不足,返回错误消息。 让我们看看客户在做什么。运行时: 获取Bank 实例
现在运行3-4次main方法并分析输出。你会看到行为不一致。有时候,一个客户可以取款,有时两个客户都不能取款。理想情况下,每次客户应该可以从账户中提取金额。但事实并非如此。 为了使此行为保持一致并使其按预期工作,我们需要 在对其执行任何操作(存入/取出)之前同步该 BankAccount 对象。 要同步对象,我们需要编写:
所以,我们修改Customer类: 这意味着当前线程需要在对帐户对象进行任何操作之前获得锁定。 为了更深入地理解它,让我们在IDE中调试应用程序。将断点放在Customer类中 应用程序将以调试模式启动 程序有2个线程:客户1和客户2,接下来我们选择线程“客户1”按F6, 然后选择线程“客户2” 这意味着此线程(客户1)获得了BankAccount的该对象的锁定,因此如果另一个线程试图获取该对象的锁定,该线程将被阻止。 |
|
来自: 昵称11935121 > 《未命名》