文档章节

java集合类深入分析之Queue篇(3)

oswebgod
 oswebgod
发布于 2017/03/14 13:21
字数 321
阅读 4
收藏 0

针对篇(2),做了一些改进:

public class XenPool {
    private static Logger logger = Logger.getLogger(XenPool.class);
    private AtomicInteger xenConnectionCount=new AtomicInteger(0);

    private static Map<String,AtomicInteger> countPool = new ConcurrentHashMap(100);
    public XenPool(){}

    public static Connection getConnect(XenServer xenServer) {
        URL url =null;
        try {
            url = new URL(xenServer.Hostname);
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        }
        String host=url.getHost();
        Connection connection = null;
        try {
            connection = new Connection(new URL(xenServer.Hostname), XenServer.REPLY_WAIT, XenServer.CONNECT_WAIT);
        } catch (MalformedURLException e) {
            logger.error("xenserver[" + xenServer.Hostname + "]建立连接异常!",e);
        }
        try {
            Session.loginWithPassword(connection, xenServer.Username, SystemService.decryptPassword(xenServer.Password), APIVersion.latest().toString());
            increase(host);
            logger.debug("TID["+Thread.currentThread().getId()+"],xenserver[" + host + "]连接建立,连接数["+getConnectionCount(host)+"]!");
        } catch (Types.XenAPIException e) {
            logger.error("xenserver[" + xenServer.Hostname + "]XenAPIException异常!",e);
        } catch (XmlRpcException e) {
            logger.error("xenserver[" + xenServer.Hostname + "]XmlRpcException异常!",e);
        } catch (Exception ex){
            logger.error(ex.getMessage(),ex);
        }
        return connection;
    }

    public static void disconnect (Connection connection) {
        String host= null;
        try {
            host = connection.getConfig().getServerURL().getHost();
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (connection!=null){//当连接不用时放到队列里
            try {
                Session.logout(connection);
                decrement(host);
                logger.debug("TID["+Thread.currentThread().getId()+"],xenserver[" + host + "]连接释放,连接数["+getConnectionCount(host)+"]!");
            } catch (Types.XenAPIException e) {
                logger.error("xenserver[" + host + "]释放异常!",e);
            } catch (XmlRpcException e) {
                logger.error("xenserver[" + host + "]释放异常!",e);
            }
        }
    }

    /**
     * wzw add 上次被清除了
     * @param xenServer
     */
    public static void removeHost (XenServer xenServer){
        if (xenServer!=null && StringUtils.isNotBlank(xenServer.Hostname)) {
            URL url =null;
            try {
                url = new URL(xenServer.Hostname);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            String host=url.getHost();
            countPool.remove(host);
        }
    }

    private static void increase(String host){
        AtomicInteger count = countPool.get(host);
        if (count == null) {
            count = new AtomicInteger(0);
            countPool.put(host, count);
        }
        count.incrementAndGet();
    }
    private static void decrement(String host){
        AtomicInteger count = countPool.get(host);
        if (count == null) {
            return ;
        }
        count.decrementAndGet();
    }

    private static int getConnectionCount(String host){
        AtomicInteger count = countPool.get(host);
        if (count == null) {
            return 0;
        }
        return count.get();
    }

}

© 著作权归作者所有

oswebgod
粉丝 8
博文 63
码字总数 142547
作品 0
浦东
私信 提问
源码阅读(9):Java中主要的Queue、Deque结构——概述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/yinwenjie/article/details/96308528 1. Queue、Deque结构概述 Queu...

说好不能打脸
08/09
0
0
JAVA多线程-基础Synchronized

后篇: JAVA多线程-基础Lock Condition 并发集合 JAVA多线程-交互计算 Future Callable Promise 读懂代码,首先要懂得thread的几个状态,以及它们之间的转换. Java thread的状态有new, runnable...

xpbug
2012/11/07
1K
10
JAVA多线程-基础Lock Condition 并发集合

前篇 JAVA多线程-基础Synchronized 后篇 JAVA多线程-交互计算 Future Callable Promise 后篇 JAVA多线程-线程池-实例模拟上厕所问题 跟上一篇文章比较,这次改进了之前的代码,使用了Lock Cond...

xpbug
2012/11/08
3.1K
5
这篇文章的类关系图用什么工具?

看许令波的深入分析 Java I/O 的工作机制这篇文章中的类关系图如下: 原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-javaio/。 想知道是用什么工具画的,感觉不错。...

xway
2013/06/20
249
4
数据结构知识学习与面试 一点课堂(多岸学院)

Queue 什么是队列 队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。 队列的种类 单队列(单队列就是常见的队列,...

程伟鑫
09/11
22
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript设计模式——适配器模式

  适配器模式是设计模式行为型模式中的一种模式;   定义:   适配器用来解决两个已有接口之间不匹配的问题,它并不需要考虑接口是如何实现,也不用考虑将来该如何修改;适配器不需要修...

有梦想的咸鱼前端
21分钟前
2
0
Andorid SQLite数据库开发基础教程(1)

Andorid SQLite数据库开发基础教程(1) Android数据库访问方式 SQLite是Android系统默认支持的文件数据库。该数据库支持SQL语言,适合开发人员上手。本教程将讲解如何开发使用SQLite的Andro...

大学霸
24分钟前
3
0
Handler简解

Handler 这里简化一下代码 以便理解 Handler不一定要在主线程建 但如Handler handler = new Handler(); 会使用当前的Looper的, 由于要更新UI 所以最好在主线程 new Handler() { mLooper = Lo...

shzwork
46分钟前
4
0
h5获取摄像头拍照功能

完整代码展示: <!DOCTYPE html> <head> <title>HTML5 GetUserMedia Demo</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum......

诗书易经
49分钟前
3
0
正向代理和反向代理

文章来源 运维公会:正向代理和反向代理 1、正向代理 (1)服务对象不同 正向代理服务器的服务对象是客户端,可以将客户端和代理服务器看作一个整体。 (2)配置方法不同 需要在客户端配置代...

运维团
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部