java-关于Servlet多线程的问题

问题描述

关于Servlet多线程的问题

Servlet是单实例多线程的,所以我就做了一个小的测试验证这种模式,很简单,

class DemoServlet extends HttpServlet {

public void doGet(......) {
    System.out.println("come in.");
    Thread.sleep(10 * 1000);
}

}

然后在浏览器多个地址栏同时请求这个servlet,发现必须第前面的请求结束,后面的请求才可以进入doGet方法,实在搞不懂为什么,求大神帮解答下!!

另外,关于异步Servlet的也是如此,必须等前面请求的AsyncContext.complete()之后,后面的请求才能进doGet方法,这还算多线程吗?

解决方案

认为这跟servlet无关,下面的应该是可能的情况
1. 服务器的请求允许数已被设置为1(如果你没动过,那么不会是1)。
2. 使用多个浏览器同时请求尝试(怀疑同一session Id被和谐,嗯,有可能是服务器优化的一种表现,不是很好吗)。
3. 使用多个终端同时请求尝试(怀疑同一session Id被和谐)。
4. 你看错了。

解决方案二:

?介绍了Servlet多线程机制,通过一个实例并结合Java 的内存模型说明引起Servlet线程不安全的原因,给出了保证Servlet线程安全的三种解决方案,并说明三种方案在实际开发中的取舍。

  关键字:Servlet 线程安全 同步 Java内存模型 实例变量

  Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Serv......
答案就在这里:servlet 多线程问题

解决方案三:

Servlet是单例线程安全的类,它可以实现多个用户同时访问,但因为它是单例线程安全的,就等于是对象锁,当有人在用这个对像的时候,别人就没有Servlet对象,就不能调用方法,就只能等别人放开这个对象之后,才能调用方法。

解决方案四:

就是说是同步的,,并不是异步的,,,

解决方案五:

Servlet的多线程环境是由Servlet容器处理用户请求的方式决定的,Servlet容器处理每个用户的请求时都启动一个线程去处理的,所有线程共享Servlet实例对象。
Servlet的线程安全与否与Servlet对象中是否有共享变量,以及对共享变量的访问是否有同步处理决定的。
详情参考:http://www.cnblogs.com/itTeacher/archive/2012/11/14/2769822.html
另外CSDN一篇文章也相信讲述了Servlet的安全性的含意:http://blog.csdn.net/yaerfeng/article/details/7385860

解决方案六:

这是同步多线程,一个资源一次只能被一个线程访问!
要同时访问就是异步了

解决方案七:

这是同步多线程,一个资源一次只能被一个线程访问!
要同时访问就是异步了

时间: 2024-08-02 14:23:36

java-关于Servlet多线程的问题的相关文章

如何使用Java、Servlet创建二维码

归功于智能手机,QR码逐渐成为主流,它们正变得越来越有用.从候车亭.产品包装.家装卖场.汽车到很多网站,都在自己的网页集成QR码,让人们快速找到它们.随着智能手机的用户量日益增长,二维码的使用正在呈指数上升. 让我们来看看QR码的简要概述,以及如何在Java中生成它们. QR码介绍 QR码(Quick Response 快速响应码)是矩阵条形码(或二维码)的一种类型,最先为于汽车行业而设计.得益于其快速读取性和较大的存储容量,QR码开始在汽车行业以外流行.图案是在白色背景上由有序排列的黑色方块组

浅谈java中异步多线程超时导致的服务异常_java

在项目中为了提高大并发量时的性能稳定性,经常会使用到线程池来做多线程异步操作,多线程有2种,一种是实现runnable接口,这种没有返回值,一种是实现Callable接口,这种有返回值. 当其中一个线程超时的时候,理论上应该不 影响其他线程的执行结果,但是在项目中出现的问题表明一个线程阻塞,其他线程返回的接口都为空.其实是个很简单的问题,但是由于第一次碰到,还是想了一些时间的.很简单,就是因为阻塞的那个线 程没有释放,并发量一大,线程池数量就满了,所以其他线程都处于等待状态. 附上一段自己写的调

mongodb-Mongodb在java中,多线程update时报错,请问是哪里出现的问题?

问题描述 Mongodb在java中,多线程update时报错,请问是哪里出现的问题? public class LocationPressureTest { private Todo todo; private int number; static Mongo mg = new Mongo("localhost", 27017); static DB db = mg.getDB("location_pressure_test_db"); static DBColl

控制-关于java的一个多线程问题,为什么输出的不是一次tom一次李四,是不是在输入判断0,1那里有问题?

问题描述 关于java的一个多线程问题,为什么输出的不是一次tom一次李四,是不是在输入判断0,1那里有问题? class Producer//这个是单生产线,单消费问题,一个单生产线有多条路径的问题(最后的效果的输入输出线程轮流执行) { public static void main(String[] args) { //创建资源 Resource res=new Resource(); //创建线程 input in=new input(res); output out=new outpu

java线程-java中的多线程?线程的并发问题

问题描述 java中的多线程?线程的并发问题 多线程具体代表java中程序的什么?它指的实际功能上的什么情况?详细求解 解决方案 多线程和进程的关系详解: 1.当我们运行QQ程序时,操作系统就会为这个程序创建一个QQ进程(QQ~PCB)并且分配CPU.内存等资源. 2.但这个进程中包含着:发送大型的线程.接受文件的线程.发送文字信息的线程.发送文字信息的线程等多个不同功能的线程. 因而我们才能一边发送文件,一边发送文字信息同时操作.这些线程都共享着QQ进程中的CPU.内存等资源. 总结:所以说进

java关于socket 多线程的问题

问题描述 java关于socket 多线程的问题 现在是指定一个时间,应用启动就开始定时扫描,隔一分钟扫描一次,到了指定的时间我就需要去Ping两千多台电脑,用多线程处理,每个线程负责50个.我该怎么处理?各位大神们,先说说思路再给我写点简单的代码啊.救急啊,我第一次搞这些东西完全不会额. 解决方案 public class Tdd { private static ScheduledThreadPoolExecutor es = new ScheduledThreadPoolExecutor(

方法-java怎么用多线程并发运行for?

问题描述 java怎么用多线程并发运行for? 如果把下面的改成十个线程并发运行不同的for语句,,就我最下面写好的那个方法,参数用定义好的数组里面的十个int变量,请问要怎么写? public static void main(String[] args) { for(Thread t:getThreads()){ t.start(); } } public static Thread[] getThreads(){ Thread[] thread = new Thread[10]; for(

java sql server jsp-JSP java SQL servlet实现页面表格生成Excel文件

问题描述 JSP java SQL servlet实现页面表格生成Excel文件 使用JSP java SQL server做了个小系统,现在想实将现通过查询功能生成的表,通过页面上的按钮触发,生成Excel文件.求大神指导! 解决方案 http://271788203.iteye.com/blog/491052

java基于servlet实现文件上传功能解析_java

最近项目需要做一个文件上传功能,做完了分享下,顺带当做笔记. 上传功能用后台用java实现,前端主要是js的ajax实现.后台还加入定时删除临时文件. 效果如图 首先是上传功能的主要类,下面是代码 package util.upload; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterat