久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

事件驅(qū)動 _2

 閃寧斯達(dá) 2021-05-27
import com.mars.util.ClassMethod;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.EventListener;
import java.util.EventObject;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class EventTest222 {

    public static void main(String[] args) {
        EventSource eventSource = new EventSource();
        TestEventListener listener = new TestEventListener();
        eventSource.addListener(listener);

        TestEventListener2 listener2 = new TestEventListener2();
        eventSource.addListener(listener2);

        int count = 0;
        while (true) {
            if (count % 3 == 1)
                eventSource.publishEvent(new TestEvent(123, "一個事件"));
            else
                eventSource.publishEvent(new TestEvent2(456, "一個事件"));
            count++;
            if (count > 10000)
                break;
        }
    }

}

abstract class MarsEvent extends EventObject {

    public MarsEvent(Object source) {
        super(source);
    }

    public abstract String eventType();

    public abstract String getMsg();

}

class Constants {

    public static final String EVENT_TYPE_1 = "1";
    public static final String EVENT_TYPE_2 = "2";
    public static final String EVENT_TYPE_3 = "3";

}

/**
 * 事件對象
 */

class TestEvent extends MarsEvent {

    private String msg;

    /**
     * Constructs a prototypical Event.
     *
     * @param source The object on which the Event initially occurred.
     * @param msg    附加消息
     * @throws IllegalArgumentException if source is null.
     */

    public TestEvent(Object source, String msg) {
        super(source);
        this.msg = msg;
    }

    public String getMsg() {
        return "eventType = " + eventType() + " || " + this.msg;
    }

    @Override
    public String eventType() {
        return Constants.EVENT_TYPE_1;
    }

}

class TestEvent2 extends MarsEvent {

    public static final String EventType = "2";
    private String msg;

    /**
     * Constructs a prototypical Event.
     *
     * @param source The object on which the Event initially occurred.
     * @param msg    附加消息
     * @throws IllegalArgumentException if source is null.
     */

    public TestEvent2(Object source, String msg) {
        super(source);
        this.msg = msg;
    }

    public String getMsg() {
        return "eventType = " + eventType() + " || " + this.msg;
    }

    @Override
    public String eventType() {
        return Constants.EVENT_TYPE_2;
    }

}

interface MarsEventListener extends EventListener {

    String eventType();

}

/**
 * 事件監(jiān)聽者,按照 Java 規(guī)范應(yīng)實(shí)現(xiàn) EventListener 接口
 */

class TestEventListener implements MarsEventListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestEventListener.class);

    public void handleEvent(MarsEvent event) {
        LOGGER.info(ClassMethod.loggerInfo("TestEvent, msg is:" + event.getMsg()));
    }

    @Override
    public String eventType() {
        return Constants.EVENT_TYPE_1;
    }

}

class TestEventListener2 implements MarsEventListener {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestEventListener2.class);

    public void handleEvent(MarsEvent event) {
        LOGGER.info(ClassMethod.loggerInfo("TestEvent222, msg222 is :" + event.getMsg()));
    }

    @Override
    public String eventType() {
        return Constants.EVENT_TYPE_2;
    }

}

/**
 * 事件源
 */

class EventSource {

    private Set<MarsEventListener> listenerSet = new HashSet<>();

    public void addListener(MarsEventListener listener) {
        listenerSet.add(listener);
    }

    public void publishEvent(MarsEvent event) {
        threadPool.submit(new HandleEventThread(event));
    }

    public EventSource() {

    }

    private static final LinkedBlockingQueue<Runnable> threadQueue =
            new LinkedBlockingQueue<Runnable>();

    private static final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(3, 3, 60,
            TimeUnit.SECONDS, threadQueue, new ThreadPoolExecutor.DiscardOldestPolicy());

    class HandleEventThread implements Runnable {

        private MarsEvent event;

        public HandleEventThread(MarsEvent event) {
            this.event = event;
        }

        public void run() {

            MarsEventListener listener = null;
            for (MarsEventListener eventListener : listenerSet) {
                if (event.eventType().equals(eventListener.eventType())) {
                    listener = eventListener;
                    break;
                }
            }

            if (Constants.EVENT_TYPE_1.equals(event.eventType())) {
                ((TestEventListener) listener).handleEvent(event);
            } else if (Constants.EVENT_TYPE_2.equals(event.eventType())) {
                ((TestEventListener2) listener).handleEvent(event);
            }
        }

    }

}

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約