00:00
行了,那么接下来咱们就接着再往下吧,咱们嗯,这块的话,把这个异步和同步的事儿呢,理解了之后呢,咱们再往下干什么呢?哎,我觉得咱们不妨啊写一个程序去模拟一下这个东西。行吧,我们去模拟一下我们这个银行账户取款。对,就是这个对这个银行账户,同一个银行账户进行取款,两个县城。同时对一个账户进行取款,我们看看不用这个线程同步,我们看看有什么问题。行吧,哎,然后呢,我们在使用上线程同步。行不行?好吧,啊,模拟一下各位啊,那这个这个该该怎么写呢各位。该怎么写?这代码可不简单啊。啊,不简单啊各位。就是编写程序,编写程序模拟两个线程同时对同一个账户进行什么呀,取款操作。
01:04
啊。嗯,这个怎么模拟呢。来,我带着大家模拟一下啊,在这块我建一个新的包吧,各位换一个包啊,这个包呢,叫做thread safe。什么意思啊,比如说线程安全啊,来线程安全我要模拟什么呢?模拟这个叫做同一个银行账户,对同一个这个银行账户被两个县城同时取款,那这个时候首先第一个你是不是有个类叫账户类啊。是吧,哎,他有银行账户啊,对吧?哎,这是一个银行账户。啊,银行账户,那么这个银行账户呢,大家注意听啊,注意听这块的话,这个程序啊,比较难啊比较难,你集中精力又难又重要,那你说这个也没办法是不是,哎,集中精力听一下好吧。他有什么呀,有账号。账号的话就string呗,行吧,然后再来个余额行不行,这个就是什么呀,账号呢,这就是余额呗,对不对啊余额好了,那么接下来我们给他提供构造方法呗,构造方法的话,无参给他给一个是不是我们再给他提供一个什么呀,有参数的构造方法,来这俩都选上,然后再给他提供s get的方法呗,S get的方法不管咋咋的也都给他提供上行不行,哎,然后呢。
02:25
嗯。行吧,再往下的话,我们给一个什么呀,取款取款的方法,取款的方法啊,Withdraw,你不是对他进行取款吗。取款取多少钱传进来参数是不是,那取款之前。取款之前的余额是多少?取款之后的余额是多少?更新余额对吧?哎,你得把这个事儿都给他算上嘛,取款之前的余额before。
03:06
之之前等于多少啊,那this呗,就get什么呀,Balance,这是不是就之前的余额之后的余额呢?After之后余额等于before之前的这个余额减去多少钱啊money。那最后你再更新啊,Set balance等于什么呀,叫after。好,这个大家能看懂吗?思考一下。将来我们是不是有可能会有这么一段代码叫account,你有一个account账号这一块的话,就叫假如这个账号啊,构造一个叫什么act-001这个账户,它的余额是多少钱,假如说比1万。行吧,然后1万的话呢,a.AA这个账户吗?调这个方法吧,叫withdraw吧,是不是取款呀,取多少钱啊,取1万呗。你看这个方法灵不灵啊,这个A账户调微方法取1万,那这个就是1万呗。那1万的话,这个this是谁,A去调这个微方法,这个this说的就是A账户对吧,This不是当前对象吗。
04:07
当前对象是不是这个账户对象,这个账户对象调get balance是多少钱,这是多少钱,是不是1万。是不是1万?对吧,好,因为他之前的余额是1万呀,那所以比方是1万,那这个就是1万嘛,1万减去这个参数传进去也是因为他取款取1万嘛,是不是,那接下来最后是不是零啊,1万减一万零,那这个时候不是s balance0啊,那这个Z指的是A啊。对吧,A3段改余额是零嘛,这个大家能看懂吗?能看懂的话扣一各位。能看懂扣一啊,能不能看懂给配合一下扣个一来before,原先是before减去这个钱。等于现在的after,然后现在这个after传进来就行了啊。是不是,哎是这样的就取款嘛,对不对取款。
05:04
啊。这大家理解吧,这个取款方法呀。这不余额吗?对不对,取款之后的余额是after吗?然后更新账户嘛,是不是哎,Set balance更新余额就可以了啊行,这个类呢,我们就写完了,这是一个account这样的一个类啊账户类。
我来说两句