有一个函数方法,是用来取得数据库的链接
public Connection getConnnection(){
   connectionsPool.removeFirst();
}
   其中conncetionsPool里面放的是对象初始化的时候创建的一个连接池,用LinkedList<Connection>实现,里面有十个链接, 
connectionsPool.removeFirst()是拿出头部的一个链接,
   假如有多个线程同步访问,书上说有可能会拿到同一个链接,这怎么可能?

解决方案 »

  1.   

    当然有可能,因为你从LinkedList<Connection>拿东西不是瞬间完成的,至少得有如下步骤吧?
    首先要明白LinkedList<Connection>存的是一个个的引用
    1,将LinkedList<Connection>里第一个引用指向的对象赋给你
    2,将LinkedList<Connection>里第一个引用删除掉
    总有个先后顺序
    假设A线程执行到第一步,而没来得及执行第二步
    此时B线程进来了,也执行了第一步
    因此都获得了第一个connection
    总结:凡是不能瞬间完成的操作,除非加了锁,不然都会出现线程安全问题