JDBC、Servlet与线程安全

JDBC

在使用JDBC连接数据库时,需要获取到数据库连接,可以写一个工具类来帮助我们连接数据库

即实现了代码的重用,也降低了错误发生的风险

但是在工具类中,获取的对象是Connection对象而不是Statement对象呢?

public static Connection getConnection() throws SQLException {
        Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        return conn;
    }

就是因为线程不安全

如果获取的是statement对象,此刻有两个用户同时获取Statement对象,传递数据执行SQL语句

当A将数据传入SQL语句中后,但没有执行时,B将数据传入,并执行完毕

此时,用户A的数据就会被覆盖,用户A操作的数据将会是B用户的数据

这就造引起了线程不安全,所以返回一个Connection对象,每个用户都获取一个Connection对象,互不干扰

 

Servlet线程安全问题

与JDBC的出现线程安全问题相似,当在servlet中定义一个全局变量时

有多个用户向该网页发送请求,那么全局变量中的值,到底是哪一个用户的值?

这就引起了线程不安全,为了避免该问题,在Servlet中要避免使用全局变量

线程安全总结

线程安全问题产生的原因,就是因为数据域的共享

数据域可以理解为传入的参数

当数据域共享后,多个线程的操作就会对该数据域进行多次的修改

这就产生了线程不安全的问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名一小卒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值