00:00
哎,好,我们把刚才这个图呢,给它保存进来哈,就我们刚才分析的这个。哎,呃,不是这个,哎,怎么去跨,跨越这个不可传参的这个屏障,怎么隔着这么远啊,怎么跨越这个阻隔,把这个把这个方法给对象传进去,我们这儿做一些个文字的说明哈。哎,就是说我们通过JDBC。工具类。获取到的connection对象需要传递给我们的。需要传递给这个丢方法,哎,让事物涉及到的所有do方法用的都是同一个connection对象。
01:10
呃,但是问题是什么呢?但是这个connection对象它无法啊,通过我们的趁点do filter方法。我这就不写参数了啊,无法通过这个方法以参数的形式传递过去。啊,这这个传递也是能传,也是一级级传啊,但是现在这个传不了。无法穿越过去啊,所以说呢,我们。哎,所以从获取到我们connection对象。呃,一直从获取到它,从获取到connection对象到使用connection对象,中间隔着很多,不是我们自己声明的方法。
02:11
啊,你想这里边儿很多都是tomcat的方法啊,我们无法决定这些方法,这些不是我们自己决定的方法,我们无法决定他们的参数。哎,这就是我们数据的啊,或者说对象啊,这个叫跨方法传递。啊,我们先要去明确有这样一个问题,当然你不知道你是不是会有这个问题啊,我那我就在do方法里边获取,不就有不就有这个对象可以用了吗?我现在不是没有这个对象用啊,我现在是要让他们有一个事物事物的控制。啊,我是想让他们保证是同一个对象,我才能够做一个统一的事物的控制,是因为这个原因,我才有才有遇到了这个问题啊,不然的话,我就在do里边自己干自己的就得了,哎。
03:03
所以这个时候呢,我们就可以借助thread local这个对象啊,来解决这个问题,为什么它能够解决呢?哎。因为我们从前到后啊,这个方法依次的去调用,去执行的时候,他们其实都在同一个线程之内。这个我怎么表示是同一个线程哈。比如说呢,我们拿这个还是拿这个箭头哈。啊,你看这也没法把他们都包进去哈。所以说在这儿呢,我们还是就就在旁边写上啊,就是这个大家领会这个精神就好了,所以这个时候呢,它是同一个线程。哎,虽然说方法这个参数啊,你决定不了,不能把数据呢,隔着这么多方法传过去啊,不能以传参的形式去传,但是呢,所有这个方法调用的过程都在同一个线程内。
04:04
哎,他们都是同一个线程啊,同都是同一个线程。哎,既然都是同一个线程,那么我们呢,就可以去。啊就可以去这个叫干嘛哈。通过这个线程呢,来帮我们去,呃,达成这个达成这个这个这个心愿,我们把这儿获取到的connection对象绑定到这个当前线程上,到用的时候呢,还从当前线程上边去取。就好比说呢,就像是这儿有一条河啊,县城的就像一条河,在河的上游,有人呢,哎在有人在河的上游洗澡,他的这个内裤呢,哎,就被冲到这个河的下游了。呀,画的有点不太像哈,哎,那下游呢,有人呢,就捡到了这条内裤。
05:04
啊,日语叫胖子是吧,啊,他就捡到了这条内裤,哎,在这个时候因为是同一条河,所以说冲下来的就是同一条内裤,我们这儿呢,就是因为绑定的是绑定到同一个线程上面的,啊,是同一个对象绑定到同一个线程上面,这获取呢,也是获取到是同一个对象。当然这是这里边儿还有的有一个要求你绑定的时候呢,我们是以这个KY6的形式绑定的,这个K呢,其实就是当前线程的这个线程对象。所以你看这个K是确定的,是唯一的啊,当前线程吧,这个当前线程的这个线程对象肯定是唯一的,哎,然后呢,这个value呢,就是你要绑定的这个对象。哎,通过这样的一个机制,我们就能够解决这样一个问题啊,相当于是一个参数的隔空传递。保存一下这个图。
06:10
好。那么这个时候我们说呢,呃,具体这个怎么去做呢?啊,这个thread local这个对象啊,它就是有两个功能啊,一个是从一个是绑定,一个是解除绑定。啊,当然了,还有就是可以去获取啊呃,这么说的话是有三个方法,我们可以来这看一下啊。小出的logo。里边呢,我们讲这个主要的方法来看啊,Structures。嗯,有一个赛的方法是执行这个绑定的啊,是把把这个数据给绑定到当前线程上盖的方法是从呃当前线程上面去获取,然后呢,还有一个remove啊,是这个移除,哎,是这三个是我们这个里边最主要的方法。
07:10
下面我们来这写一下啊。Thread这个类的全类名。啊,然后呢,它里边的这个具体。三个主要的方法。方法名。啊,然后呢,它的这个功能一个呢是set,你set方法呢,你需要传进来一个TT类型啊,就是说代表是这个,呃,Y6就是你要绑定的数据。其实这个thread local thread local这儿呢,它有声明的时候有泛型哈。这个生命的泛型呢,它就是我们这个。
08:04
哎,这个生命的泛型哈。这说上泛型啊,T,它就是要绑定到当前线程的数据的类型,从这给传进来。然后这个这个value就是我们要绑定的数据。所以赛的方法呢,就是将。数据绑定到当前线程。我们可以看一眼哈,因为这个赛的方法呢,其实有一个这里边儿有一个操作获取当前线程。它以这个T啊作为这个键,Get map啊,获取到这个map,呃,然后呢。哦,对了,这个set哈,它这个键呢是。键是thad local对象啊,键是local对象,这个我刚才说错了啊,这个确实说错了,不是当前现成对象啊,是thread local对象啊,我们thread local对象要保证它的唯一性,不然的话th local对象要不唯一的话,这个你呃获取就是你绑定值和获取值,这个就不不一样了。
09:12
一定要保证它的唯一性啊。哎,呃,Get。Get呢,也是需要你去这个方法哈。啊,不需要传参数啊,因为它就是呢。嗯,在这啊,把this传进去嘛,还是当前来的local对象啊,以以它作为键去取。所以说这个get的方法啊,是从当前线程获取。你绑定的,哎,这个数据。还有一个方法。将数据从当前线程移除啊,你有绑定就有解除绑定吧,啊有就是解除绑定。所以下边呢,我们就用这个来local啊,去去借助它去完成我们g d bc us里边的这个工具类啊,这个工具方法。
我来说两句