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中要避免使用全局变量
线程安全总结
线程安全问题产生的原因,就是因为数据域的共享
数据域可以理解为传入的参数
当数据域共享后,多个线程的操作就会对该数据域进行多次的修改
这就产生了线程不安全的问题