00:00
好,那么关于使用同步代码块呢,来处理实现的方式,继承的方式中的线程安全问题,我们就讲完了,呃,其实核心的这个内容的话呢,就是这些,然后我们下面来看一下这个方式二,方式二呢叫做同步方法,呃同步方法其实也会涉及到这样的两个问题啊,只是说呢,这个写法上有点变化了,哎什么叫通步方法呢?哎,我们我们是这个意思啊,就是哎如果,哎如果呢,这个操作共享数据的这个代码啊,就正好呢完整的声明在哎一个方法中。一个方法中,那么我们呢?不妨将此方法生命为啊,同步的。哎,声没同步的。同步的啊,那这个时候呢,这个方法我们就叫做同步方法吧,那咱们还是来举例子,举例子的话呢,咱们还拿这个实现的方式来说,我在咱们对。
01:05
第二下我再去新建一个新建的,我这叫window window test3,嗯,这个呢,还是咱们啊这样写说呢,叫使用同步方法来解决这个实现runable接口。啊,这个的现场安全问题,那这个呢,还是咱们拿这个售票来举例子,那还是跟原来这个呢,有点相似了,哎,我们在前边呢,我就这个我就直接粘一下得了。嗯,从这啊,我一直到这儿粘一下CTRLC,呃,里边有一些用不着的,我就给它删了啊,CTRLV一下过来先,嗯,这个呢,咱们叫WINDOW3。
02:02
嗯,这也都用不着。回归到一个比较原始的一个状态。好,这个呢,这不是咱们回到最初的没有使用同步代码块的这个情况了,这有个票啊这呢去这个呃判断啊,卖票里边加了一个这个sleep,然后后边呢,这个造了一个WINDOW3的对象,这样的一个情况啊,这个我们先跑一下,先来看一下它这里边的线程安全问题。那确实是有的啊,下边呢,我们使用叫同步方法来解决,那目前呢,其实没有啊,这里边儿咱们没有一个方法是专门来操作这个,呃,叫这个共享数据的代码的啊,如果你试图把这个run方法改成是一个同步的,就首先同步方法怎么写是这样写的啊,就在咱们这个方法里边呢,加上一个S就行了。
03:04
啊,在这个反应类型的前面,有点类似于像static final那个位置一样啊,那此时的这个run呢,就是叫同步了,但是呢,咱们刚才也讲了,你包共享数据不能包多也不能包少了。这不就相当于是不是把他也给包起来了吧,所以这时候呢,是不是又成了这个一个窗口去卖了,哎,对这个我就不演示了啊,这时候不对,就是对于我们这个问题来讲,大家不适合把我们的run改成是同步的啊,如果大家在实际问题中,如果你这个run里边确实完整的就是同步数据,呃,这个操作共享数据的代码了,你可以考虑把这个run加上同步的啊,咱们这儿呢,不是不是呢,我们把这个题目呢,稍微改一下啊呃,那么操作共享数据的代码咱们知道是它,我这时候呢,把它呢就抽出来了,我专门呢去造一个方法啊方法,比如我就写成private了啊,Word的一个受方法。来CTRLV一下,那这样写的话呢,咱们break呢,呃,这个时候你得用在这个循环当中,这里边没有循环,所以暂时呢,咱们把这个else呢就干掉了啊。
04:05
不要了,行,这个受方法里边呢,是咱们完整的操作共享数据的代码啊,然后这个受方法呢,咱们在这个位置呢,调了一下。哎,是这么个情况啊,那么此时的话呢,咱们就可以考虑把这个受方法,如果呢,大家还按照原来的方式处理,是不是就成了你在这个里边,嗯,去去包一下了是吧,那你就是在这个位置加一个SNE的这个写个Z行吗?咱们这是实现的方式,是不是就造了一个对象啊,哎,这是可以的啊,就是这样的写的话,这样写的话呢,相当于你还是拿咱们这个叫同步代码块来做的,嗯,这个呢,写到这这有问题吗?这个。相差问题有吗?没有,这不是对的吗?啊,这是OK的啊,这个我就不往下看了,那但是咱们现在呢,要讲的是第二种方式,所以大家呢,就别这样写了,这样写的话呢,你里边去这个呃,加上一个锁呀啥的还挺麻烦的,这个时候呢,你只需要呢,把我们这个方法诶声明成一个叫S的就OK了。
05:14
这样就行。啊,然后呢,我们再来跑一下。哎,那此时呢,也是现场安全的。嗯,这就是我们讲的叫同步方法。啊,没问题啊,这是同步方法,那么这是同步方法我们能保证的事儿呢,就是在我们这个同步方法内部这些代码呢,就跟你用同步代码块包起来一样,这个过程当中啊,就是这个外边呢,可能有好几个线程,但是在这里边呢,只能是一个线程。哎,这就是一个安全的了,那么咱们讲同步代码块的时候说过说得有一个锁啊,大家得共用一个锁,那么在同步方法当中,哎,我们没有看到这个锁。
06:00
也没有写,那这时候要问有没有锁。哎,有没有这个同步监视器。有啊,那么有的话呢,相当于它就用了默认的了,就没有让你去显示的声明了,那么这个同步监视器是谁。哎,在咱们这个受方法当中,它的同步监视器呢,就是Z啊就是Z4。哎,去体会一下啊,因为咱们说了这个这次是不是唯一的呀,哎,所以咱们这样写呢,就没有问题,嗯,就没有问题了,那么呃,这呢,就相当于咱们把这个问题呢就给解决了啊,那么这个呢,咱们先不着急去总结,咱们把这个继承的方式说完以后,咱们稍微总结一下啊,那么这个问题呢,咱们处理完了,诶这个大家注意一下,就是这时候呢,咱们手动的给它关一下啊。啊,因为咱这个收方法呢,我这写的外处是吧,结束以后的话呢,这个我们没有这个break了啊,接着给它关一下,那么这个题目呢,咱们关于这个方式呢,就先给他解决好了,哎,关于这个继承的方式也解决完以后,咱们来解决一下。
我来说两句