00:00
好了,那咱们接下来再继续往下看啊,再去新建一个class,这个class我们叫test。那么这个例子咱们来看一看,什么呢?还是看这个sleep方法,各位啊,还是看sleep方法,就是说。有这么一个东西啊,Sleep睡眠怎么着太久了。如果希望,希望半道上啊,醒来。你应该怎么办?也就是说,怎么终止一个正在睡眠?或者怎么唤醒吧。嗯。也就是说怎么叫醒吧啊,怎么叫醒一个正在睡眠的县城。
01:00
比如说我在这里来个class my roundable。二去实现什么呀?Roundable实现这个里面的方法。嗯。比如说我在这里说出一句话啊,叫thread.current thread.get。啊,然后呢,来个箭头叫做begin。Begin啊,开始执行了。那么在这里呢,我们再输出一个叫thread。点current thread.get name,我们叫end。来,嗯,在这个中间呢,我thad.sleep我一睡睡一年一秒钟乘以60秒是一分钟乘以60是一小时,一小时乘以24是一天,一天乘以365是一年,这睡眠一年啊,你看叫睡眠什么呀,一年,那这个睡眠一年我在这里呢?诶为什么这儿不能Rose啊各位。
02:15
就有这么一个问题。你看啊,在回车你看。这只有一个try catch,没有办法throw,诶,我们一下看行不行。哎,你看不行,报错了。是不是他不让你,你看。是不是哦,只能串此类重写,不能抛出更多的异常,哎,小鹏说的对啊,这就是前面内容学的,学的扎实知道吧?哎,前面内容学的扎实一眼就能看出来,首先这个类是不是继承负类,负类里边这个方法抛没抛异常?子类重写父类的方法,子类不能比父类抛出更宽泛的异常,或者是更多的异常,这个大家还记得吗?
03:03
就子类不能比父类抛出更多的异常,还记得吧,子类不能比父类抛出什么更多的异常。记得是吧,好,那大家这就算是到位了啊,学的学的内容到位啊,那么这块呢,你就不能Rose了啊,所以要记住run方法当中的异常只能出。重点啊。Run方法当中的异常不能。只能try catch啊,因为因为run方法在负类中。没有抛出任何异常。子类不能比父类抛出更多的异常。
04:02
啊,所以这块呢,只能拆开。啊,记得是记得,就是想不起来,你是想说这个是吧?哎,记是记得想不起来啊,想不起来也正常啊,也正常,但是我一提醒你就想起来了,我觉得这样也可以。嗯。那我再问大家一个问题啊,假如说我在这里写一个方法,这个方法呢,叫做do,这个do other方法,我在这里调用了do other方法,我在这调用do other。Do other,那么我do other方法能不能啊在这。可以吗?各位,这个可以吗?各位给个回应,这个位置,这个方法行不行?没毛病吧?这个可以吧。哎,这个别的方法可以啊,对,其他方法可以,Rose听懂了吧?哎,只不过你Rose的话在这一块,你只能选择try cash看见没?你没有办法在这throw听懂了吗?哎,没有办法在这throw啊,哎,没有办法在这throw,你只能在这怎么着啊,Try catch只能在这拆开啊。
05:16
对,这个不是继承的方法,对,有道理啊,有道理来这个我就注释掉了,跟这个程序没关系啊,主要不是为了讲它,主要呢,我们是来看看这个县城啊,上来就睡一睡一年。对吧,他睡眠一年。睡眠一年,醒了之后才会执行下面这个代码,对不对?一年之后是不是才执行这个,才会执行这个这里啊。但有没有可能是这样,就是说我希望我希望什么呀,我手里的活儿干完之后,他就得醒来,我先让他睡,这个睡呢,我让他睡的时间我设置的特别长。对吧,哎,我设置特别特别长,我不想让他起来,但是呢,我有可能怎么着,我先给他一个呃大概的一个睡眠时间,让他睡死睡死啊是不是,然后呢,我们在哎干手里干模活的时候,诶干完了,诶我这干完之后,那那那个谁谁谁谁你起来干活了,对吧,我得叫醒他。
06:14
有没有这个可能,有这个可能。有这个可能各位,因为我们在项目当中有可能有有这种情况。啊,有这个情况,你这个吧,一睡就睡一年是吧,你睡的时间太长了,那半道上我想让你随时醒,你就得给我醒来,对吧,怎么叫怎么中断,怎么中断现成的睡眠。这个不是啊,注意这个不是中断线程,听懂了吗?不是中断线程的执行。嗯。不是中断。
07:00
线程的执行啊是中段。现成的睡眠不是notify notify跟wait有关系。啊,这个不是中断线程的执行啊,是中断。终止吧,现成的。睡眠啊,终止。终止线程的睡眠啊,怎么终止呢?来,我们模拟一下,各位看好了啊,Thread t线程的new一个thread,然后在这里new一个roundable my round2行吗?好,那new完之后呢?接下来我们t.set name这个线程就叫T吧。接下来t start启动了,启动之后他又开始执行,执行完之后他就睡了,一睡睡一年是吧?哎,我希望什么呀,希望五秒之后,希望五秒之后啊,T现成醒来。thread.sleep。
08:02
1000乘以五是吧,哎,1000乘以五。这就是模拟什么呀,五秒啊,等五秒之后啊,在这里怎么着T现成什么,哎,中断。T,现成的什么睡眠在这里你需要执行一个方法,他就可以让他让他醒了。啊,这就这是在主线程里面吧,模拟五秒钟嘛,五秒钟之后活就干完了,这意思明白吧,就是五秒之后啊,手里的活,主县城手里的活。干完了明白吧,哎,干完了说那个谁谁谁谁该醒了啊。懂什么意思吧?哎,让他醒就行了啊,他睡眠睡一年啊,怎么醒啊?哎,t.wakeup。来这个方法叫T什么呀?Interrupt interrupt这个方法。
09:03
干扰。啊,就是一盆冷水过去。叫一盆啊,一盆冷水过去。夸嚓一下啊,这个方法会让这个线程正在睡眠的线程出异常。记住会让第32行报异常,一旦报异常之后,会进到开一块中执行,然后整个出开就结束了。明白吗?这种中断方式是靠的异常处理机制,各位我再强调一下啊,这种中断方式靠的靠的是异常处理机制啊,这种中断方式。中断睡眠的方式啊,依靠了Java的异常处理机制。这种中断中断睡眠的方式依靠了家va的异常处理机制,各位啊,依靠了异常处理机制,就相当于说你T这是线程T吗?调用interrupt这个方法,这是在闷方法里去调线程T的interrupt,比方说一盆冷水过去,这哥们睡得更香的,夸一盆冷水会醒了啊。
10:08
他一旦掉这个方法,那么thread.sleep这个方法,他就会在这里抛异常,他一抛异常,这个catch就抓住了,一抓异常,整个try catch就结束了。结束之后,我们整整个程序方向就继续走了,靠的是这种机制啊,来我们看看,你看我这里是不是打印异常异常信息,你看这里是不是打印异常信息啊,哎,打印异常信息。我们来看看这个会不会打印出来,好吧,来点右键我们执行一下,数着点啊,五秒钟来预备开始12345行了。好,大家看是不是在这块就Java language interrupt exception sleep interrupted是吧,叫睡眠被中断,是不是睡眠被中断,这个信息的打印是谁给打印的呢?是你这一行代码给打印出来的,明白吧,因为这个地方抛异常了,为什么这个地方抛异常了,因为你这里调用了这个方法,调一个interrupt,这个方法它可以干扰,可以一盆冷水过去,哎,这样的话,这个就抛异常了。
11:08
就catch住了,哎,然后继续往下执行结束之后他就醒了。啊就行了,就是这种手段,各位啊,这种手段啊,大家看非常经典的一个手段,你看走一个。12345秒走一个。是吧,哎。是这种方式啊,你不愿意看见这个异常信息,可以你把这个注释掉就行了,注释掉它就不会有异常信息打印出来了,对吧,来走一个。12345走一个好,大家看这个end是不是执行了,对吧,就醒了呗,那为啥醒了,因为这这个方法呀。对吧,哎,干扰啊,一盆冷水过去它就行了,就这个意思好吧,好,这个sleep方法啊,这个例子啊,主要是给大家说一下,你睡的时间太死了,你睡的太长了,我想或呃,我想让你让你起来对吧,让你中断,中断他的睡眠。
12:08
你怎么办?可以调interrupt方法啊。
我来说两句