<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 閱讀(626) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 99久久免费看国产精品| 在线观看AV片永久免费| 全免费a级毛片免费看不卡| 中文字幕在线亚洲精品 | 久久夜色精品国产嚕嚕亚洲av| 亚洲一区动漫卡通在线播放| 永久免费A∨片在线观看| 免费国产a国产片高清网站| 亚洲中文字幕无码爆乳app| 最近中文字幕mv免费高清视频8| 亚洲中文字幕无码一久久区| 真人无码作爱免费视频| 亚洲乱码无码永久不卡在线 | 一级毛片免费观看不卡视频| 亚洲AV永久青草无码精品| 免费A级毛片无码A∨| 91亚洲精品麻豆| 午夜免费福利在线观看| 阿v免费在线观看| 亚洲愉拍99热成人精品热久久| 国产在线观看免费视频软件| 久久亚洲春色中文字幕久久久| 18禁免费无码无遮挡不卡网站| 亚洲中文无码亚洲人成影院| 免费人成视频x8x8入口| 视频免费在线观看| 亚洲精品在线网站| 免费国产精品视频| 国产成人精品无码免费看| 亚洲av永久无码精品三区在线4| 日韩免费视频播播| 18禁在线无遮挡免费观看网站| 亚洲天堂一区二区三区| 四虎永久成人免费| 免费国产黄网站在线观看可以下载 | 两个人日本WWW免费版 | 无码专区—VA亚洲V天堂| 成人免费网站在线观看| 男人免费视频一区二区在线观看| 亚洲国产精品不卡在线电影| 韩国二级毛片免费播放|