Servlet须知--如何使Servlet线程安全

 Servlet 定义中并未表明是单例,只不过Servlet Container只会对每一个Servlet创建一个实例。每个独立的线程服务一个请求,这样来处理并发。如果希望Servlet Container创建过个实例处理高负载请求,可以实现SingleThreadModel(Servlet2.4之后不建议使用)。

Servlet Container创建一个Servlet实例来并发处理所有请求,这样减少了内存消耗,同时使持久化数据的管理更加简单。

使用Servlet时,需要注意:

1.局部变量是线程安全的(由于并发的原因,实例变量难以保证一致性,当然可以使用同步锁来控制,不过这样效率会大受影响)

2.不变对象是线程安全的,如下:

public Class Player

{

private String name;

private String number;

public Player(String name, String number)

{

this.name = name;

this.number = number;

}

public String getName()

{

return this.name;

}

public String getNumber()

{

return this.number;

}

}

也许你已经注意到,这里没有使用set方法来对域进行复制,这正是刻意而为之。生成对象时,对属性进行复制,之后不再修改,这样的对象在servlet使用中是线程安全的。

3.提供资源唯一入口点(这样会减少并发带来的危险)

.....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值