超时等待模式在一般的等待/通知机制上添加超时控制,使得方法执行时间过长也不会一直造成阻塞,而是在一段时间后返回。
通常java连接数据库时会将其执行过程交由一个线程进行处理,使得在一些I/O操作或需要一定时间运行的行为在后台运行而客户端能立刻对当前的动作做出下一个反应。例如客户端的文件下载上传等往往另开一个线程,而主程序继续监听将要发生的动作,在与数据库交互时,每个用户获得一个专属的线程对其需要的内容进行修改和同步,在并发量较低的情况下,当然可以依次new出一个线程来,但一旦加大了用户数量,或用户频繁地进行操作时,服务端反复创建和回收也会造成比较大的开销,加大系统的负载。(且通常会有很多一些小操作需要服务端快速地进行处理)
线程池的技术能比较合理地解决此问题,预先创建一定量的线程,不由用户对线程直接进行创建控制,而是争取资源获得复用线程进行操作。可以消除频繁创建和消亡所带来的开销(具体线程量和执行速度与多因素有关,在实际使用时应该视情况而定)。
等待超时的模式如下:(伪代码)
//同步对象锁
public synchronized Object get(long mills) throws InterruptedException{
long remaining=mills;
long future=System.currentTimeMills()+mills;
......
...
while((result==null)&&remaining>0){
wait(remaining);