00:00
好,那咱们继续啊,诶下边的话呢,我们来看一看,叫线程调试啊,那前面呢,咱们写的这个代码啊,其实上都是一个单线程的问题,诶我们在这个主线程当中啊,进行代码的一个执行啊和调试啊,那么我们在实际开发当中啊,是有可能会接入到多线程的,对吧?啊那如果我们想针对于某一个线程哎进行调试的话呢,诶这就对应的我们叫做诶线程调试了。啊,比如说我这呢,写好了一个代码,诶大家看一下啊,我在main方法当中,也是我们这个主线程当中啊,诶调用一下这个test测方法啊,调了两次。然后呢,每调用一次呢,我们其实在内部呢,就创建了一个线程啊,并且让这个线程呢,诶执行起来。那么我们传入的这个方法的参数呢,呃,就是给我们这个线程呢,在命名的啊,因为呢,这个值你看传进来以后呢,传到我们这个位置了。这个大家呢,如果已经学习过多线程了啊,这个代码应该是OK的啊,当然了,这里边我用了一下拉曼达表达式啊呃,如果拉曼的表达式还不熟呢,呃,这块呢,嗯,这个你就把它呢,替换成我们这个new一个reable这样个形式也行。
01:03
啊也行啊,那如果呢,还没有接触多线程的问题啊,大家这块你就先看一个热闹就行啊,先看一个热闹啊,这块呢,我们调呢,实际上是thread这样的一个构造器,哎,第二个参数呢,是给我们当前线程呢去命名的,哎,第一个位置呢,我们传一个reno的一个实现类的对象啊这个线程呢,启动的时候呢,就执行这个run方法就可以了。啊,那么这个方法呢,实际上呢,就是我们这样的一个代码。就是便利一下啊,零到呃99这样的一个自然数啊,这样一个场景,哎,这呢,就是我们具体的每一个县城执行的是不是都是这个操作呀。然后呢,这两个线上一个叫THREAD1啊,一个呢叫THREAD2。诶,当我们在主线当中启动起来以后啊,我们只想针对于某一个线程啊进行调试啊,你比如说在这个代码里边啊,我们把这个呃断点呢,就加到这个for循环这个位置了啊在这个位置呢,我们右键啊这个首先呢,把这个all的位置呢,改成thread啊,针对于具体某一个线程来考虑的。哎,考虑什么呀?诶如果呢,你要是这个THREAD2的话呢,我们就调试,诶THRE1我不管,哎,所以这个位置呢,我们就可以加上这样一个条件了啊,诶我们用一个字符串啊,比如说叫s thread。
02:10
啊二然后呢点啊,如果呢,你是E4,哎,当前thread。这个current获取一下我们当名啊,如果是我们就让。哎,这块呢,我们做一个第八个。啊,大家会发现呢,我们当前呢,呃,没有起作用是吧。啊,为啥没起作用呢?来,我们稍微的看一眼啊。嗯,这个位置啊,大家看我这个位置呢,我写错了是吧?诶这呢应该是个大写的T哈,好,那这个写完以后呢,我们再去做一个debug。哎,这时候我们就停到这儿了,好大家注意啊,我说呀,哎这个断点呢,停留到这的时候呢,只针对于咱们THAD2呢哎起作用,哎RE1呢哎不受影响,所以呢,我们如果看这个conso的时候,诶你会发现这个一呢诶全部呢都打印完了。
03:01
哎,都打印完了,好,那么在这个THREAD2呢,执行的时候呢,我们满足了这样一个条件,所以它就停到这儿了,哎停到这儿的话呢,比如我们再往下,哎走一步。哎,走一步这块呢,相当于我们又回到这个for循环这个位置啊,所以呢,我们把这个I是零的这个值呢,就打出来了。啊,那么这个呃,再接着你再走一步啊,这就打印个一啊就是这样个情况,诶相当于呢,呃,这个代码就是针对于诶SURPRISE2啊来谈的啊你看一下42呢,这块执行过程当中诶会出现什么样的问题,诶我们就进行剖析就可以了。呃,虽然说两个线程执行的哎都是这样的代码,但是我们只针对于外二啊起作用啊,这呢就是我们所谓的叫诶线程的一个哎断点的调试。啊,就是它的这样一个场景啊,行这呢,我们就说到这儿了,诶那么大家呢,在11开发当中,哎,如果呢,你是多个线程啊,进行分析的话呢,针对某个线程进行调试啊,你就用我们这样一个知识点就可以了。然后再往下呢,这个叫强制结束啊,强制结束诶什么意思,来咱们看一看下边这个叫DEBUG07啊。
04:03
呃,这儿呢,我以一个这个场景来说啊,比如说这块呢,我们涉及到这呢,是Java的后台啊,这呢是我们这个前端这个页面了啊这个页面当中呢,把这个数据呢,发送到我们这个Java的后台了,诶Java的后台呢,把这个数据呢,把它诶保存在我们的数据库当中,诶这样的一系列这个操作,那么在这个过程当中,我们进行一个调试啊进行调试。啊,比如说这块我们在这个操作的时候呢,呃,针对这个inser列方法啊,比如说这个位置我们加上一个断点了。啊说可能会出现这个异常的情况是吧?哎,我们做一个debug啊,然后呢,这个隐色的话呢,我们就进入这个方法内,诶然后我们就这样,哎一步一步的哎做这个调试,诶那调试到这的时候呢,诶我们就已经发现了啊这个异常啊出现在哪了。啊,或者我们这个bug呢,出现在哪了啊,那么下一步呢,大家你会发现呢,紧接着我们就把这个数据呢,是不是要写入到这个数据表里了呀。啊,紧接要写入了,诶那这块要真正写入的话呢,这个数据就就进去了,我们就不想让他去执行这个操作了,诶因为呢,咱们已经发现这个问题了是吧?诶那怎么办呢。
05:04
啊,怎么让我们这个程序呢,就诶就结束了,哎不再往下去执行了呢,哎这个时候呢,你看我们在这个iner这个方法这个位置啊,诶我们可以右键啊,这个右键你看诶有个frame是吧?诶是点它好使吗?哎,那我们点一下试试啊。哎,我就点了。点下来以后,你看它就出来了是吧,诶出来以后呢,是不是就没事了呢?诶我们这样让它执行的结束。结果呢,你发现呢,诶,他照样的把后边这个操作呢,你看也执行了是吧?诶所以刚才那个打叉那个不太靠谱啊,我们再重新呢,再去选一下。啊,我们进入到这个代码的内部啊,诶这个你往下走,我们不想再,呃这个你比如说再走了一步是吧?诶后边这个呢,真正往数据表中去写的时候呢,我们不想让它执行了啊,那这个时候呢,咱们就可以呢,这样啊,诶还是右键,这个时候我们有一个叫false return啊强制的让他呢去返回。诶点这儿啊,诶然后呢,你可以再往下,诶下边去执行,所以这时候你会发现呢,我们进入隐射的时候呢,呃,第一行这个执行了。
06:02
呃,然后下边这个呢,我们还没有输出的时候呢,我们就让他强制结束了,诶所以最后有个程序的结束,诶后边这个代码呢,他就没有再去操作了。哎,这个呢,就是我们说的叫哎强制结束这样的一个操作。啊,大家呢,如果有需要的话呢,你就可以呢,这样的去实施啊就行。
我来说两句