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

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

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

    繼續(xù)上一篇隨筆:基于XMPP的GTalk機(jī)器人 關(guān)鍵詞:XMPP smack GTalk
    這篇隨筆將使用消息隊(duì)列機(jī)制,讓GTalk機(jī)器人一直在線
    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();

        
    // 線程池維護(hù)線程的最少數(shù)量
        private final static int CORE_POOL_SIZE = 2;

        
    // 線程池維護(hù)線程的最大數(shù)量
        private final static int MAX_POOL_SIZE = 4;

        
    // 線程池維護(hù)線程所允許的空閑時(shí)間
        private final static int KEEP_ALIVE_TIME = 0;

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

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

        
    // 訪問消息緩存的調(diào)度線程
        final Runnable accessBufferThread = new Runnable() {
            
    public void run() {
                
    // 查看是否有待定請求,如果有,則創(chuàng)建一個(gè)新的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() 
    + "消息放入隊(duì)列中重新等待執(zhí)行");
                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);

        
    // 調(diào)度線程池
        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)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲成人黄色在线观看| 免费毛片毛片网址| 在线观看免费精品国产| jizz中国免费| 久久久亚洲AV波多野结衣| 成人免费午夜视频| 精品国产福利尤物免费 | 久久亚洲AV成人无码国产 | 亚洲Av熟妇高潮30p| 免费在线观看的网站| 久草免费福利在线| 亚洲一区二区三区精品视频| 亚洲日韩人妻第一页| 91成年人免费视频| 一级黄色免费毛片| 亚洲人xxx日本人18| 久久久亚洲精品蜜桃臀| 99久久久精品免费观看国产| 久久国产一片免费观看| 在线a亚洲老鸭窝天堂av高清| 亚洲精品自产拍在线观看| 女人18毛片a级毛片免费视频| 大地影院MV在线观看视频免费| 亚洲精品中文字幕无码A片老| 亚洲妇熟XXXX妇色黄| 免费一级做a爰片久久毛片潮喷| 毛片无码免费无码播放| 欧亚一级毛片免费看| 国产亚洲精品bv在线观看| 久久99国产亚洲精品观看| 免费a级毛片无码av| 桃子视频在线观看高清免费完整| 东北美女野外bbwbbw免费| 亚洲AV成人无码网天堂| 亚洲精品在线播放视频| 亚洲毛片αv无线播放一区| 免费va人成视频网站全| 天堂在线免费观看中文版| 97av免费视频| 中文字幕乱码一区二区免费| 一级毛片免费在线观看网站|