JavaWeb基础-Servlet线程安全问题

Servlet对象,在第一次被访问的时候被创建,或者是配置了随应用启动便初始化的Servlet,可见,Servlet是单例的。
为了应对并发的对同一个servlet的请求,Tomcat内部维护了一个线程池,调度线程,来Servlet进行访问。

在何种情况下,会发生线程安全问题呢?
在Servlet里定义了一个属性message,每个线程都公用这一个message。

public clss ThreadSafeServlet extends GenericServlet{
    String message = null;
    void service(){
        message = request.getParameter("msg");
        System.out.println(message);
    }
}

其实,就演变成了下面的演示代码。想必也是能看出来,其中的线程问题。

ThreadSafeServlet servlet = new ThreadSafeServlet();

class TheadObj implements Runnable{
     run(){
        servlet.service();
    }   
}
public void dispatcher(){
   Runnable r1 = new ThreadObj();
   Runnable rw = new ThreadObj();
   Thread thread1 = new Thread(r1);
   Thread thread2 = new Thread(r2);
   thread1.start();
   thread2.start();
}

避免线程安全问题,就不用定义这种全局的公用的属性。将属性定义到方法内。
方法内定义的变量,每个线程是否都是“备份”了一份呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值