⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wrap.java

📁 一套MMORPG手机网络游戏的服务端
💻 JAVA
字号:
/*
 * Created on 2005-4-20
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.swing.server.common;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * @author vampire_a
 * 
 * 一个以阻塞队列作为任务输入的线程池模型
 */
public abstract class Wrap implements Runnable, EventHandler, Lifecycle{
    
    /** log4j logger */
    protected Logger log;

    /** incoming event queue */
    protected EventQueue eventQueue;

    /** are we running */
    protected boolean running = false;

    /** our pool of worker threads */
    private Thread workers[];

    /** short Class name of the implementing class */
    private String shortname;

    /**
     * @param numWorkers
     * 
     * 在这里启动线程池,里面没有监控线程,只有几个工作线程
     */
    public final void initWrap(int numWorkers) {
        // setup the log4j Logger
        shortname = this.getClass().getName().substring(
                this.getClass().getName().lastIndexOf(".") + 1);
        log = Logger.getLogger(shortname);
        PropertyConfigurator.configure(Globals.LOG4J_FILE);
        log.info("initWrap - " + shortname);

        eventQueue = new EventQueue(shortname + "-in");

        // spawn worker threads
        workers = new Thread[numWorkers];
        for (int i = 0; i < numWorkers; i++) {
            workers[i] = new Thread(this, shortname + "-" + (i + 1));
            workers[i].setDaemon(true);
            workers[i].start();
        }
    }

    /**
     * shutdown the worker threads
     */
    public void stop() {
        running = false;
        if (workers != null) {
            for (int i = 0; i < workers.length; i++) {
                workers[i].interrupt();
            }
        }
        log.warn("" + eventQueue.size() + " events haven't been processed!");
    }
    
    public void start () {
        
    }

    /**
     * queue the event for later processing by worker threads
     */
    public void handleEvent(GameEvent event) {
        eventQueue.enQueue(event);
    }

    /**
     * retrieve events from the queue and process.
     */
    public void run() {
        GameEvent event;
        running = true;
        while (running) {
            try {
                if ((event = eventQueue.deQueue()) != null) {
                    processEvent(event);
                }
            } catch (InterruptedException e) {
            }
        }
    }

    /**
     * subclasses must implement to do their processing
     */
    protected abstract void processEvent(GameEvent event);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -