数据库中有数据 ,单独访问也没有问题都可以正常显示就是多并发的时候会出现有些数据没有显示的效果怎么回事呢
他虽然每次都查到了数据,但你的数据可能放到了一个全局变量里,
多线程并发时,这个变量的值还没放到页面显示,下个操作就把变量的值给覆盖了
在处理并发请求时做了强制排队
并发的线程排队,转为单独访问数据。
关键看这部分数据是如何展现的,直接访问数据库取数据还是。。。
是用jsp还是ajax
会不会是这种情况了呢?
哪个变量定义成了全局变量(或者相对于不同线程之间都可以访问的变量),而这个变量就是存结果值的,
多线程高并发时,可能这个变量的值还没发到页面上显示,就被下一个请求使用的线程把变量的值置空了,最终结果就是可能有些时候可以看到结果,有些时候看不到。。。。。
只是猜想,等待下面推测
我觉得可能并发量大的时候,数据库连接不够用了,所有有一部分页面的访问都阻塞了,无法得到数据,所以就显示不出数据
访问数据库阻塞了,为什么要抛异常,只是在等待可用的数据库连接,并不是什么错误
阻塞了线程,自然也不会返回的,就卡在那边等连接可用嘛
这个就要看你的页面结构了,这个块没有数据,可能不被其它的影响,
不过关键这样分析都没多少用,关键还是得看你那部分数据是怎么得到并展现的?
这个得看你们代码结构了,,全局变量的使用确实得注意,曾经就遇到过因为全局变量原因造成大并发时,用户意见丢失,但我们怎么测都不能重现该问题,重新看了N多遍代码都觉得逻辑上不会有问题,但就是用户那边会出现意见丢失,我们这边怎么测都没问题。
后来在代码上添加了很多日志,把里面的内容一条条的打出来看,才感觉是因为并发时才造成的,然后就怀疑是哪个变量值被另一个线程给改了,造成数据丢失,但是由于写这段代码的人都不在公司了,也不好找是哪段代码的原因,于是就只能自己重写了代码,不使用他的代码,而是现从数据库拿,再展现。。。
所以像这种,个人感觉想找出是不是全局代码还得先分析下日志(或者你对自己代码特别了解,知道哪个地方会造成资源的竞争),日志打印出的信息最好把线程号也打印出来,把估计可能变空的变量值也打印出来。这样可以分析哪个线程在什么时候把值给置空了。
仅做分析,至于你出现的问题是不是这种情况,得你自己把握