并发编程-等待超时模式

等待超时模式是在等待通知的基础上增加了超时控制,一般的数据库连接池都是这种模式。

简单模拟了下数据库连接池的获取连接方法:

package cn.bikan8;

import java.sql.Connection;
import java.util.LinkedList;

/**
 * @Author 小浩
 * @Date 2020/5/29 14:01
 * @Version 1.0
 **/

/**
 * 数据库连接池
 */
public class DBPool {
    LinkedList<Connection> pool = new LinkedList();

    /**
     * 获取连接方法
     * @param mills 超时时间
     * @return
     */
    public Connection getConnection(long mills) {
        synchronized (pool) {
//           小于0表示无超时等待,直到获取到连接
            if (mills < 0) {
                while (pool.isEmpty()) {
                    try {
                        pool.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                return pool.removeLast();
            } else {
//               等待超时模式
                long future = System.currentTimeMillis() + mills;
                long remain = mills;
                while (pool.isEmpty() && remain > 0) {
                    try {
                        pool.wait(remain);
                        remain = future - System.currentTimeMillis();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                Connection connection = null;
                if (!pool.isEmpty()) {
                    connection = pool.removeLast();
                }
                return connection;
            }

        }

    }
}

 

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发