wrap.java

来自「一个MMORPG手机游戏的服务器端程序源代码」· Java 代码 · 共 82 行

JAVA
82
字号
package zsw_mmorpg.common;import org.apache.log4j.Logger;/** * Wrap.java *  * Wrap is a thread pool with an incoming BlockingQueue * of GameEvents * * @author <a href="mailto:shiwei@raymobile.com">朱世伟</a> * @version 1.0 */public abstract class Wrap implements Runnable, EventHandler {    protected Logger log;    /** milliseconds to sleep between processing runs */    protected static final long WORKER_SLEEP_MILLIS = 10;    protected EventQueue eventQueue;    protected boolean running = false;    private Thread workers[];    private int spareCount;    private Object countLock = new Object();    private String shortname;    /**     * @param numWorkers number of worker threads to spawn     */    public final void initWrap(int numWorkers) {	// setup the log4j Logger	shortname = this.getClass().getName().substring(this.getClass().getName().lastIndexOf(".") + 1);	log = Logger.getLogger(shortname);	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();	}    }    public void shutdown () {	running = false;	if (workers != null) {	    for (int i=0;i<workers.length;i++) {		workers[i].interrupt();	    }	}    }    /**     * 事件入栈     */    public void handleEvent(GameEvent event) {	eventQueue.enQueue(event);    }    /**      * 处理事件的机制     */    public void run() {	GameEvent event;	running = true;	while (running) {        try {		if ((event = eventQueue.deQueue()) != null) {		    processEvent(event);		}	    }	    catch (InterruptedException e) {	    }	}    }    protected abstract void processEvent(GameEvent event);    /**保存所有玩家信息*/}

⌨️ 快捷键说明

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