<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    繼續上一篇隨筆:基于XMPP的GTalk機器人 關鍵詞:XMPP smack GTalk
    這篇隨筆將使用消息隊列機制,讓GTalk機器人一直在線
    ThreadPoolManager.java:
    package com.yinger.util.gtalkRobot;

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.Executors;
    import java.util.concurrent.RejectedExecutionHandler;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.ScheduledFuture;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;

    public class ThreadPoolManager {
        
    private static ThreadPoolManager tpm = new ThreadPoolManager();

        
    // 線程池維護線程的最少數量
        private final static int CORE_POOL_SIZE = 2;

        
    // 線程池維護線程的最大數量
        private final static int MAX_POOL_SIZE = 4;

        
    // 線程池維護線程所允許的空閑時間
        private final static int KEEP_ALIVE_TIME = 0;

        
    // 線程池所使用的緩沖隊列大小
        private final static int WORK_QUEUE_SIZE = 4;

        
    // 消息緩沖隊列
        Queue msgQueue = new LinkedList();

        
    // 訪問消息緩存的調度線程
        final Runnable accessBufferThread = new Runnable() {
            
    public void run() {
                
    // 查看是否有待定請求,如果有,則創建一個新的AccessThread,并添加到線程池中
                if (hasMoreAcquire()) {
                    String msg 
    = (String) msgQueue.poll();
                    Runnable task 
    = new AccessThread(msg);
                    threadPool.execute(task);
                }
            }
        };

        
    final RejectedExecutionHandler handler = new RejectedExecutionHandler() {
            
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                System.out.println(((AccessThread) r).getMsg() 
    + "消息放入隊列中重新等待執行");
                msgQueue.offer(((AccessThread) r).getMsg());
            }
        };

        
    // 管理線程池
        final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS,
                
    new ArrayBlockingQueue(WORK_QUEUE_SIZE), this.handler);

        
    // 調度線程池
        final ScheduledExecutorService scheduler = Executors
                .newScheduledThreadPool(
    1);

        
    final ScheduledFuture taskHandler = scheduler.scheduleAtFixedRate(
                accessBufferThread, 
    01, TimeUnit.SECONDS);

        
    public static ThreadPoolManager newInstance() {
            
    return tpm;
        }

        
    private ThreadPoolManager() {
        }

        
    private boolean hasMoreAcquire() {
            
    return !msgQueue.isEmpty();
        }

        
    public void login(String msg) {
            Runnable task 
    = new AccessThread(msg);
            threadPool.execute(task);
        }
    }
    AccessThread.java
    package com.yinger.util.gtalkRobot;

    public class AccessThread implements Runnable {
        
    private String msg;

        
    public String getMsg() {
            
    return msg;
        }

        
    public void setMsg(String msg) {
            
    this.msg = msg;
        }

        
    public AccessThread() {
            
    super();
        }

        
    public AccessThread(String msg) {
            
    this.msg = msg;
        }

        
    public void run() {
            if(GTalk.gTalk == null)
            {
                GTalk gTalk 
    = new GTalk();
            }
        }
    }
    修改
    GTalk.java
    package com.yinger.util.gtalkRobot;

    /**
     * GTalk manager
     * 
     * 
    @author Ying-er
     * @mail melody.crazycoding@gmail.com
     * @time 2011/07/18 8:45:54
     * 
    @version 1.00
     
    */
    public final class GTalk {

        
    public static SmackToGtalk gTalk = SmackToGtalk
                .getInstance(GTalkRobotConst.MODE);

        
    public static ThreadPoolManager tpm = ThreadPoolManager.newInstance();
        
    static {
            tpm.login(
    null);
        }

        
    public static void sent(String str) {
            
    try {
                gTalk.sendMessage(str);
            } 
    catch (Exception e) {
            }
        }
    }
    哦了 =。=




    posted on 2011-07-19 09:43 Ying-er 閱讀(632) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产网站免费观看| 综合在线免费视频| 免费国产成人午夜电影| 亚洲熟妇成人精品一区| 91在线视频免费看| 国产成人精品亚洲2020| 成年女人看片免费视频播放器| 亚洲中文字幕乱码AV波多JI| 麻豆成人精品国产免费| 另类图片亚洲校园小说区| xxxx日本在线播放免费不卡| 无码国产亚洲日韩国精品视频一区二区三区| 自拍偷自拍亚洲精品偷一| 亚洲精品成人a在线观看| 你是我的城池营垒免费看| 久久久久亚洲AV成人无码| 3d成人免费动漫在线观看| 亚洲国产日韩综合久久精品| 午夜色a大片在线观看免费| 黄网站色视频免费看无下截| 伊人久久综在合线亚洲91 | 成人黄动漫画免费网站视频| 亚洲av乱码中文一区二区三区| 免费h黄肉动漫在线观看| 精品97国产免费人成视频| 亚洲综合一区二区国产精品| 两个人的视频高清在线观看免费| 亚洲AV成人无码网天堂| 国产精品亚洲二区在线观看| 91福利视频免费观看| 亚洲精品亚洲人成在线| 国产午夜亚洲精品午夜鲁丝片| 91精品国产免费入口| 亚洲av成人一区二区三区在线播放 | 国产成人亚洲精品青草天美| 1000部拍拍拍18免费网站| 蜜桃传媒一区二区亚洲AV| 亚洲av色福利天堂| 日本免费网站在线观看| 暖暖免费在线中文日本| 亚洲乱码中文字幕在线|