有一个函数方法,是用来取得数据库的链接
public Connection getConnnection(){
connectionsPool.removeFirst();
}
其中conncetionsPool里面放的是对象初始化的时候创建的一个连接池,用LinkedList<Connection>实现,里面有十个链接,
connectionsPool.removeFirst()是拿出头部的一个链接,
假如有多个线程同步访问,书上说有可能会拿到同一个链接,这怎么可能?
public Connection getConnnection(){
connectionsPool.removeFirst();
}
其中conncetionsPool里面放的是对象初始化的时候创建的一个连接池,用LinkedList<Connection>实现,里面有十个链接,
connectionsPool.removeFirst()是拿出头部的一个链接,
假如有多个线程同步访问,书上说有可能会拿到同一个链接,这怎么可能?
首先要明白LinkedList<Connection>存的是一个个的引用
1,将LinkedList<Connection>里第一个引用指向的对象赋给你
2,将LinkedList<Connection>里第一个引用删除掉
总有个先后顺序
假设A线程执行到第一步,而没来得及执行第二步
此时B线程进来了,也执行了第一步
因此都获得了第一个connection
总结:凡是不能瞬间完成的操作,除非加了锁,不然都会出现线程安全问题