时间:2021-07-01 10:21:17 帮助过:19人阅读
运行结果如下:
[plain] view plain copy特别注意如果getConn方法和close方法都为同步方法,将产生死锁:
[java] view plain copy同一时刻只能有一个线程调用连接池的getConn方法或close方法,当Semaphore中没有可用的许可,并且此时恰好有一个线程成功调用连接池的getConn方法,则该线程将一直阻塞在acquire方法上,其它线程将没有办法获取连接池上的锁并调用close方法释放许可,程序将会卡死
阻塞方法上不要加锁,否则将导致锁长时间不释放,如果该锁为互斥锁,将导致程序卡住
acquire方法本身使用乐观锁实现,也不需要再加互斥锁
示例二:不可重入互斥锁
[java] view plain copy运行结果如下:
[plain] view plain copy
Java中Semaphore(信号量) 数据库连接池
标签:public tco int 方法 else zed url details this