如果在initialValue()方法内部加上Thread.sleep(500)的话,运行结果显示三个线程还是在共享着同一个连接,那不还是线程不安全吗?
运行效果图如下所示:
代码如下所示:
package com.bjsxt; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * <b style = "font-size:15px;">用于获得与数据库的连接以及关闭连接</b> * @author 郑锦宗 * @version v1.0 */ public class DBUtil { private static final String DRIVER="com.mysql.jdbc.Driver"; private static final String USER="root"; private static final String PWD="root"; private static final String URL="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"; private static Connection conn=null; //定义一个数据库连接 private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>() { protected Connection initialValue() { try { Class.forName(DRIVER); if(conn==null){ conn=DriverManager.getConnection(URL, USER, PWD); } try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; } }; //获取连接 public static Connection getConnection(){ return tl.get(); } //关闭连接的方法 public static void colseConnection(){ if (conn!=null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { System.out.println(getConnection()); } }
源码压缩包如下所示:
源码压缩包.zip
为什么错误啊
对类.方法.属性进行注释时一般是放在变量上面么? 那种写法好一些?
比如:
//定义**的ID
int ID = 15; int ID = 15; //定义**的ID
对类或者方法注释时/** , /* , //用哪个是都可以吗?一般用哪个比较规范呢.
老师,NAN怎么回事?代码貌似没有问题。。。
不明白为什么这样输入会成功,按照打印的SQL查询,结果应该为0,怎么会成功
老师,我原原本本的敲这一节视频里面的代码,点F12的时候,出现下面这个情况
但是我把您给的源代码贴过来,重新运行就没出现这个情况,这是啥原因啊?
MenuView类里边的,showMenu()方法,根据输入的数字选择不同的操作,为什么不直接调用EmpDaoImpl类中的相对应的方法,比如case 1语句,里,为啥是调用addemp,而不是直接调用EmpDaoImpl类中的insEmp方法
老师,这一节里面这块代码中,是不是只能写 .nav_ul2 span而不能写nav_ul2>span?
这个'>'是只能用在ul里面第一个标签上面吗?然后更里面的标签只能用空格了?
该咋理解?
类方法的调用问题
class Student: count = 0 company = 'sxt' def __init__(self,name,sex): self.name = name self.sex = sex Student.count +=1 print('现在有{0}个学生'.format(Student.count)) @classmethod def company_print(cls): print('****') s1 = Student('czy','male') s1.company_print()
在上述代码中,我设置了一个类方法 company_print(),按照课件中所说,只有模具类student中含有类方法的信息,而实例的对象中不含有,那为什么s1.company_print()可以正常运行呢?
同理,为什么我访问类属性,常规操作是 Student.count 为什么s1.count也可以访问呢,两者有区别吗?
为什么equals方法有时比较的是对象地址,而有时比较的是对象内容?
a = eval(input('x:') print(type(a)) #为什么这段代码,当我输入数字的时候,a显示的int类型,但是当我输入字符串str类型,会报错,eval还有什么用法
为什么这两种方法会有效率上的差异呢?
第一种每次循环都调用了math.sqrt函数
第二种每次循环使用b这个变量,不是也相当于调用了b这个函数吗,只不过换了个变量名?
额,运行50多次才会出现一次抢断,总之抢断的出现很少,我的错上一个问题作废
线程截断 的那个我的代码和老师的一样但一只都是这样输出的并没有出现强的现象
老师,该视频里面用到了一个 ResultSetMetaData metaData = rs.getMetaData();这个是怎么出来的呢,太突兀了,这个方法是干什么用的呢?之前视频中没有讲到这个把
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637