一般情况下:每秒钟一个servlet可以处理多少个请求?另外servlet在处理并发请求时有什么需要特别处理的吗
比如:servlet调用的方法要设置synchonize吗,对数据库操作要synchronize吗

解决方案 »

  1.   

    不用这样考虑的,这个是web程序,............
      

  2.   

    不用考虑,每个client一个实例。
      

  3.   

    最近在看 只了解基础, servlet支持多线程的,多个线程共用一个servlet实例,所以servlet中一般不定义成员变量,这样可以防止并发时的数据读写错误,定义成员变量的话就要做好同步,应该是这样。
      

  4.   

     线程问题
            在一个可以配置的应用中,所有的请求都是一个会话的一部分,引擎一定能够取出通过setAttribute或putValue放入HttpSession对象中的对象。注意以下的情况:
            .引擎一定能够访问实现了Serializable接口的对象。
            .引擎可以选择存储HttpSession对象中指定的对象,如EJB组件和事务。
            .引擎能够监听到会话的变动。
            如果放入session中的对象没有被Seializable或没有效,servlet可以抛出IllegalArgumentException;如果引擎不支持Session存储对象的机制,引擎一定会抛出IllegalArgumentException。
            这些限制意味着,在一个分布式引擎中,不会有额外的并发问题。
            如果引擎为了service的品质持续化或迁移session,使用本地持续化的HttpSession或它的属性是不受限制的,开发者要想确保放入session中的属性对象能够可用,最好对象实现Serializable接口。
            在迁移一个session时引擎必须通知session中实现了HttpSessinActivationListener的属性对象,必须通知在序列化前钝化的或序列化后激活的session的监听器。
            开发分布式的开发者应该清楚的是,一旦引擎运行在超过一个JVM的时候,就不能用static 表明变量来存储应用状态,应该用EJB或数据库赖存储。
     多线程问题
            servlet引擎可以发送并发的请求给servlet的service方法,servlet开发者必须提供足够的线程来运行service方法。
            对开发者来说一个可以选择的方法是实现SingleThreadModel接口,以确保在同一时刻只有一个请求在service方法中。一个引擎要确保请求能够在servlet中持续化,或维持在一个servlet实例池中,如果servlet是web应用服务的一部分,引擎可以在一个虚拟机中拥有一个servlet实例化的池。
            对于没有实现SingleThreadModel接口的servlet,如果service方法(或 doGet,doPost)被声明为synchronized,引擎将不能用实例池的途径,而必须持续化请求,强力建议开发者不能声明synchronize service方法,这样会严重影响系统的性能。
    2单线程servlet
            SingleThreadModel接口保证了在同一时刻一个servlet实例的service方法只会被一个线程执行。这对于每个请求发送给每个实例是很重要的。引擎可以从对象池中选择,对象池可以在同一时刻保持多个实例,如HttpSession可以被多个servlet在任何时候调用包括实现了SingleThreadModel接口的servlet
      

  5.   

    这跟 servlet 没有关系。这跟服务器,怎么使用 servlet 有关系。而且你写的是 web 程序。又不是让你拿 serlvet 写服务器。 楼主这个话问的,servlet  应该是为每个请求创建的,又不是单例的,所以处理请求是服务器的工作,不是 serlvet 的本分。而且他是为每个请求创建的,而且服务在使用他时,是由服务器来处理,这个不用你操心。