00:00
那好,下面呢,我们就通过solid来给大家演示一下啊,这个线程安全问题到底是一个什么样的问题。因为solid是单利多线程的是吧,它就存在这样的问题,并不是说solid一定存在线程安全问题啊,它是可能会出现线程安全问题。那么怎么让他出现?给它加上。给他加上这个可修改的。全变量就OK了,那我们就来写这样一个。例子。啊哟,错了啊。这个。这个是28。Thread。呃,安全问题,呃,这个这个。
01:02
线程安全是吧。呃,现场安全,咱们这样啊,这儿来个表单。来一个。爱田苗。嗯,index.l。表达。诶,这样吧,先不管那么多,我这来一个。用户名。An input type等于textname等于username。
02:04
Input type等于。Value等于咱们这个叫什么。呃,登录登录就登录。Method等于post。好,这儿我们刚刚学过路径问题啊,那这儿写什么。我现在。由谁来对这个表单进行处理啊?Log这写什么?啊。我记得给大家说过呀,这要写的内容,如果你不知道写什么。让他以斜杠开头来分析。
03:00
Login。这个路径出现在iml文件里边。并且以斜杠开头,所以它是一个什么路径?这是个前台路径。前台路径的参照路径是谁?对,你可记住了啊,这你得记,记着,这必须得记着,这是规则。前台路径的参照路径是当前web服务器的根。就那个。Itl冒号杠杠。Localhost冒号8080就他吗。那他下面有这个东西吗。肯定没有,所以你加上杠肯定访问不到。那就不带不加盖。不加杠,不加杠行不行呢?那不加杠,你就得想一下。
04:02
不加杠,这种路径就是以路径名称开头的相对路径,以路径名称开头的相对路径的参照路径是谁?是当前访问路径的。资源路径。资源路径你注意,那当前访问路径会是谁?应带点itl啊,你肯定是这个东西啊。肯定是这个项目名称前面有那个,哎,他这这个咱们这样。这样咱发布一下,这这光那说。我看一下啊。Fairs。啊。九二。
05:03
大家看。当前的。访问路径的资源路径是谁?资源路径最后一个斜杠之前的部分嘛,肯定是它呀,它里边有没有一个叫做login的东西啊。肯定有,所以不加斜杠是可以访问到的啊。当然我们现在还没有定义它呢,是不是,那现在给它定义呗啊。来个so late。Com点北京power not点词,然后这个是log。Log of it。
06:04
我们是do post对吧。那。我先说出一句话,就他先说说他我们看一下我们刚才分析那个路径啊,主要是让大家看一下刚才那个路径。早。没问题吧,是不是这肯定是没问题的啊好,我们现在不说路径的问题了啊,现在要说什么了。现在要说线程安全问题了,这个so,它是单利多线程的,我要想让他存在线程安全问题,我就得给他添加一个。
07:07
成员命令。叫什么,我这个就叫username。然后呢,我username等于什么?等于request.get parameter username。我们可以输出一下看看。输出一下看看。那大家看这个username,它是全员变量吧,我加上。对吧。那这是不是对这个成员变量的值进行修改呢?
08:01
有同学怎么就修改了,那你想想啊,你访问这个login,我给他复制值张三。你给他访问的时候负的是张三,我访问的时候负的是李四,是不是这个u name的值就不一样啊?所以这是对他的修改呀。对,成员。变量的修改。那由于斯是单利。多线程的。而其中又存在可修改的成员变量username。所以。
09:01
当前这个log in。存在不存在现场安全问题啊。肯定存在是吧。存在线程安全问题,什么叫存在线程安全问题啊,就是。G。这个so是线程不安全的,它是线程不安全的。就这意思啊。那好,跑一下吧。咱们跑一下这个程序。这样我我不在这儿这样输出啊,这样输出。咱们已经学过response了,是吧?Response get writer,然后out。
10:03
out.print什么东西呀,Username等于username,诶直接给它是吧,显示到这个。呃,显示到这个这个这个什么这个浏览器上啊,显示到浏览器上。那好。现在呢?现在。跑一下吧。直接跑一下这个程序。早。你看这是不是显示李四啊?这样我再开一个窗口。我再开一个窗口。可以这样火。
11:13
这是张三。你看他是不是张三?这个里边是不是李四啊。对不对,这就是县城。不安全吗?诶,这个不明显。我跟你讲啊。我给你加个断点。我给大家加个断点。啊,加个断点。那么这样我加到这儿。我嫁到这儿啊,就断定我嫁到这儿。我刷新一下。看着我,这是李四啊,走。哎,我这儿没有重新启动啊。
12:02
我得。哎。在这个。要想以调试模式啊,运行这个服务器。我们需要这样。Debug。这个启动了,这个已经启动了啊。走。好。到站点了。现在大家看一下username的知识什么,是不是李四啊,对吧,我现在没有继续往后运行啊,这时候大家看这。我刷新一下。我也点他走。又到断点了。你再看现在的是什么?是不是张三?
13:01
同一个程序啊,刚才那李四呢。没了。这李四已经被覆盖了。有同学说那不明显,好,你看着啊,不明显,我点它resume继续。走。看着这儿是不是张三过来了吧,他是张三没问题,关键你看看这个窗口。等待的是吧,等待我登录进去。Yeah。啊,这个。这个我们来看一下啊。
14:00
让它,让它继续运行。这坏了,这这这这这会儿。又成李四了,那李四把那个给覆盖了,嗯,这个这个这个我们。啊,来看一下啊,你看一下怎么样把这个效果给大家演示出来,停了,现在把它停了啊。这个是李四。这是张三。好,我现在。还要。
15:02
开启,我要。我把这个窗口关了。加发意义啊,这里边儿有服务器。把这个删掉。第八个。Debug。登陆。好到断点了。到断点了,现在我们知道它的值肯定是李四。然后呢?登录。也到断点了,现在同样是这个程序。他已经变成了张三。变成了张三。现在我要让他继续。
16:05
要让他继续。咱们这样。看到没?这个变成谁了?是不是变成张三了,哪一个是不是他变成张三了,他明显是李四啊,怎么是张三呢?对不对,他这现在是等待的,你这儿是不是填的张三,但是我们已经看到了这个线程不安全,那他现在是。处于阻塞状态啊,它处于阻塞状态。那这就已经看到效果了,你应该出来是李四,可是你现在出的是张三。那这就OK了。这就OK了。线上安全问题我们就看到了。
17:03
或者说这个县城不安全,我们现在就已经看到了。好。
我来说两句