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

📄 shuffle.java

📁 JGRoups源码
💻 JAVA
字号:
package org.jgroups.protocols;import org.jgroups.Event;import org.jgroups.Message;import org.jgroups.stack.Protocol;import java.util.*;/** * This layer shuffles upcoming messages, put it just above your bottom layer. * If you system sends less than 2 messages per sec you can notice a latency due * to this layer. * * @author Gianluca Collot * */public class SHUFFLE extends Protocol implements Runnable {    String       name="SHUFFLE";    final List         messages;    Thread       messagesHandler;    public SHUFFLE() {        messages = Collections.synchronizedList(new ArrayList());    }    public String getName() {        return name;    }    public boolean setProperties(Properties props) {        String     str;        super.setProperties(props);        str=props.getProperty("name");        if(str != null) {            name=str;            props.remove("name");        }        if(props.size() > 0) {            log.error("DUMMY.setProperties(): these properties are not recognized: " + props);            return false;        }        return true;    }    /**     * Adds upcoming messages to the <code>messages List<\code> where the <code>messagesHandler<\code>     * retrieves them.     */    public void up(Event evt) {        Message msg;        switch (evt.getType()) {	case Event.MSG:            msg=(Message)evt.getArg();            // Do something with the event, e.g. extract the message and remove a header.            // Optionally pass up            messages.add(msg);            return;        }        passUp(evt);            // Pass up to the layer above us    }    /**     * Starts the <code>messagesHandler<\code>     */    public void start() throws Exception {        messagesHandler = new Thread(this,"MessagesHandler");        messagesHandler.setDaemon(true);        messagesHandler.start();    }    /**     * Stops the messagesHandler     */    public void stop() {        Thread tmp = messagesHandler;        messagesHandler = null;        try {            tmp.join();        } catch (Exception ex) {ex.printStackTrace();}    }    /**     * Removes a random chosen message from the <code>messages List<\code> if there     * are less than 10 messages in the List it waits some time to ensure to chose from     * a set of messages > 1.     */    public void run() {        Message msg;        while (messagesHandler != null) {            if ( messages.size() > 0 ) {                msg = (Message) messages.remove(rnd(messages.size()));                passUp(new Event(Event.MSG,msg));            }            if (messages.size() < 5) {                try {                    Thread.sleep(300); /** @todo make this time user configurable */                }                catch (Exception ex) {                    ex.printStackTrace();                }            }        }// while        // PassUp remaining messages        Iterator iter = messages.iterator();        while (iter.hasNext()) {            msg = (Message) iter.next();            passUp(new Event(Event.MSG,msg));        }    }    // random integer between 0 and n-1    int rnd(int n) { return (int)(Math.random()*n); }}

⌨️ 快捷键说明

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