00:00
那好了,同学们,那么这一块的话,我们应该怎么解决这个线程安全问题,怎么解决这个线程安全问题,各位。就是我们这个第一行,第二行,还有这第三行,我们是不是只能有一个线程去执行,我们只要能保证住这个代码,这个代码和这个代码在只能有,不能并发,必须排队,明白什么意思吧,必须排队执行。就是你这一行代码,还有这一行代码,还有这行代码必须在一个线程完全执行结束之后,另外一个线程才能进来,在这里执行执行,执行,执行。这样的话不就不能并发了吗?这样的话排队吧,排队的话这不就可以保证这个数据的安全问题啊。对吧,这个是不使用线程同步机制啊。这不使用什么呀,线程同步机制。啊。多线程对同一个账户进行取款。出现什么呀?多线程对同一个账户进行取款,出现线程安全问题。
01:03
啊,安全问题。那么现在呢?我们在这里啊。我们去新建一个。Package。我们叫thread safe什么呢?二这个包啊,然后把上面这几个呢,我们给它复制一下,好吧,拿过来放到这儿。OK啊。改了各位啊,改了,那么我们现在呢,就是使用线程同步机制来解决线程安全问题啊,解决线程安全问题。各位啊,解决现场安全问题。好,我们来看一下啊,都是这个包吧,没错吧,是这个包吧,啊count呢,是不是也是这个包,没毛病吧。好,没毛病啊,那么整个程序我们不用动,只需要动这个位置,就这个位置。
02:01
来删掉删掉啊来删掉这删掉啊删掉来整个这全删掉,整个这个代码从这个位置开始到这个位置结束,只能有一个线程执行。明白吗?注意啊,以下这几行代码必须是县城排队的,不能并发。啊,一个线程把这里的代码执行结束啊,一个线程把这里面这里的代码全部执行结束之后,另一个线程才能进来,怎么做?哎,注意啊,需要使用线程同步机制。怎么用呢?加一个synchronized,终于见到这个关键字了,各位。啊,这个表示县城同步机制,县城排队执行。
03:03
嗯。把它放到同步代码块当中。啊,这个就是线程同步机制,线程同步机制的语法是什么。是synchronized。Synchronized啊括号啊,括号这个我们叫做什么呀?叫做线程同步代码框啊,线程同步代码框,那么这个SYNCH的括号里面传的这个东西是非常非常关键的,我再说一下啊。Synchronized。后面小括号中传的这个。数据是相当关键的啊,是相当关键的,这个数据必须是多线程共享的数据。
04:01
才能达到什么呀,达到。达到。多县城排队。重点讲这个各位啊,重点讲这个这一块的小括号中的东西怎么写,小括号中。写什么?那要看,那要看你想让哪些线程同步。啊,那要看你想让哪些线程注意听啊,集中精力啊,那要看你想让哪些线程同步,假设,假设T1 T2 T3 T4T5。有五个线程,有五个线程,你只希望啊,你只希望T1T2T3排队。
05:04
T4T4T5不需要排队怎么办?你一定要在小括号里边写一个T1 T2T3共享的对象啊,你一定要在小括号中写一个T1 T2 T3。共享的对象。而这个对象对于T4、T5来说不是共享的。听明白了吗?那这块我写什么呢?你得找一个啊,注意啊,这个位置小括号里边写的这个东西啊,是什么呢?是一个共享的对象,而这个共享的对象呢。你填什么就是就是有很多就是迷糊在这儿,就是填什么不知道填什么在这儿。填共享对象,那这个共享对象是谁的共享对象,谁的共享对象是谁的呀?哎,你想让谁和谁同步,那么你这块你就写谁和谁的共享对象,假如说你是让T1T2T3这三个线程。
06:19
在这个代码里面排队,但T4和T5不用在这排队的话,你就只需要在这儿写一个T1、T2、T3共享的对象。听懂了吗?听懂扣一各位。扣一啊,听懂没有,就这块儿要写的这个共享对象是。需要排队的共享。啊,那这块写谁呀。请各位。谁是共享的?当前账户对象是不是共享的?
07:04
银行账户账户。账户对象是共享的,对吧。那这个里边谁代表账户对象。这里的共享对象是账户对象吧?小鹏说的对啊。嗯。太棒了太棒了啊,这里的共享对象是账户对象。对吧,账户对象是共享的。那么Z就是。账户对象吧。所以这边是不是写Z就行。来我们执行一下,大家看啊。会不会有问题?
08:02
你看变慢了吧,之前没有用线程同步的时候是并发的感觉吧,一下就出出来了,效率高啊,但你现在用了这个,用了这个排队之后,因为你这里要睡一秒,其中一个线程睡了一秒,第二个线程还会睡一秒,是一共是两秒,所以大家看这个效率变低了,但是数据变安全了。他取款5000剩5000,这个取款5000剩零,你看是不是就安全了,你不管你怎么执行,这个就是安全了。排队了,T1线程和T2线程排队了,看见没?排队了啊,这个下午的时候我再详细去讲吧,各位啊,上午先给大家写到这儿,有很多就是迷糊在这儿了,这为什么写this。他不一定写这啊,只要是共享的对象就行。不一定是这,你写别的也可以。不一定是this啊,不一定是this,这里只要是是多线程共享的那个对象就行,不一定是this啊,只不过碰巧了碰巧了,因为这个账户呢,它是共享的这个方法里边有个this,这个this不就是当前账户吗。
09:11
既然是单元账户,那就拿过来呗,对吧,那就执行呗,你看。是吧?对吧,哎,行,大家先去吃饭去吧啊。
我来说两句