# water-machine **Repository Path**: TobuMJ/water-machine ## Basic Information - **Project Name**: water-machine - **Description**: 从0开始的多线程打水生活 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-11 - **Last Updated**: 2021-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 这个简单的练习题是我自己在小区打水的时候想到的。 尽量去还原了一部分。 事情是这样的:小区有个打水机,可以扫码打水,有一次我想着能不能同时打两桶水,我发现是可以的。 然后问题来了,那个时候我只有1元钱,只够打一通水,这台机器的特点是当你按了开始之后不会立刻扣钱,而是等你按停止按钮之后才会扣钱。 所以,聪明的我,自然想到了,这个时候我岂不是可以1元钱打两桶水,哈哈哈,然后我就同时打两桶水,打着我的如意算盘,然后等我按了停止之后发现, 我的余额变为了负数!!!好吧,看来,这位工程师早就想到了。 所以想还原一部分情况,顺便练习一下多线程。 ## 练习点 1. 多线程 2. 【会设计模式可能会简单那么一点】 ## 详细介绍 1. 打水机器 `Machine` 2. 每一台机器都有两个口可以打水,方便起见,我叫他 `Cell` 【单元格】。(要是有更好的叫法请在评论区指出) 3. 简化图
Machine
↓
出水口A 出水口B
start start
stop stop
## 问题
正常情况下,用户按开始按钮开始打水,按结束按钮停止打水,扣钱
【为了模拟这种开始打水和结束打水的情况,我提供了简化的方式,也就是CellRunner.run 可以指定打水时间,比如打水1秒,10秒等,
就不需要模拟用户操作了】
1. 保证单个用户打水可以正常扣钱
2. 保证不同用户同时使用打水机器时,都可以正常打水,正常扣钱,不会影响
3. 保证一个用户同时使用一台机器的两个打水口时,可以正常打水和扣钱
4. 保证一个用户同时使用2台机器的所有打水口,即同时使用4个打水口,还可以正常打水和扣钱。
## 你需要做的
在 `water-machine/src/test/java/com/concurrent/water/machine`下有一个`MainTest`,保证它能正常运行
具体需要做的:
补齐User,Cell,DefaultBillManager,DefaultMachine等
## 注:
一种可能的实现参考分支possible-one