“我想单线程是不是一个servlet实例处理一个请求,多线程是一个servlet实例处理多个请求。”这句话错了!!!
1.对于一个servlet,每个用户请求将生成新的线程。
2.当首次创建servlet时就会调用init()方法,而并不是每个用户请求都调用该方法。
3.当每个用户请求servlet时,都会调用server方法,所以你的classcount是
不停的增长的,因为它是静态的。不过你的count应该不会不停增长吧?

解决方案 »

  1.   

    那个count的确是在不停的涨啊涨,那么麻烦您讲解一下单线程和多线程的区别
    ,单线程可以保证变量的安全是怎么回事?再次感谢!!
      

  2.   

    单线程简单的说就是cpu以顺序的方式,一条一
    条执行程序语句,在执行一条语句之前不会执行
    下一条语句。多线程简单说就是多个线程不分先后的并发执行
    线程可以共享共同的数据变量。对,在多个请求执行servlet时,其实是执行
    servlet的同一个实例!
    但是server()方法是并发执行的,所以你的
    count classcount不停的增长,刚才一点
    是我的错!!!
      

  3.   

    在《java servlet 编程》那本书,就是一个有名的老外写的书中56页里面的程序就是我贴出来的程序,他说classcount被所有实例所共享,class是每个实例都有的,这里所有的实例怎么体现?怎样才能出现两个实例?我运行程序,不管是在一台机器上多次链接,还是在不同及其上链接,都显示只有一个实例。
    谢谢指教!!我都晕了
      

  4.   

    老外的也有错啊,不过估计是翻译的问题

    servlet是应该只有一个实例
    不同的线程共享同一实例
    并发执行server()方法!
    否则你的count不可能会增长!
      

  5.   

    但是书中有一张图,图中指出单线程的时候,每一个请求一个servlet的实例,而多线程的时候多有的请求就一个servlet处理,这个servlet多线程工作
    还望再次赐教。
    我贴的程序已经是单线程的了,那么应该是一个请求一个实例。
    而且书中还说实例的个数好像和配置文件有关,配置文件里面写了几个servlet的名字,就几个实例?这个我没有看懂,描述的也不一定对,不好意思
      

  6.   

    你只要这样理解就可以了servlet引擎会在第一次初始化servlet时在内存中
    创建一和实例。并且执行init()初始化方法
    接下来的请求servlet引擎会开辟一个新的线程
    然后执行server方法(也就是doGet,doPost)方法