简体   繁体   English

如何从Java线程触发事件监听器

[英]How to fire event listener from Java thread

I have thread with Socket inside. 我里面有Socket线程。 When soket receives some data, I need to fire event (using my sublassed EventObject). 当soket接收到一些数据时,我需要触发事件(使用细分的EventObject)。 Event listeners is added from main thread (to some list?). 事件侦听器是从主线程添加的(到某个列表?)。 is this OK? 这个可以吗?

Pseudocode:



public class SocketThread extends Thread{
    private Socket socket;
    private MyEventListener eventListener;

    public SocketThread(Socket socket, MyEventListener eventListener) {
        this.socket=socket;
        this.eventListener=eventListener;
    }

   public void run() {
        get socket input stream...
        get socket output stream...
        when data received, call process(data) 
    }

   void process(data){
     synchronized(this){
        myEvent event=new MyEvent(data);
        eventListener.fireSomeEvent(myEvent );
    }
}


// main thread

ServerSocket serverSocket=new ServerSocket(host,port);
Socket socket= serverSocket.accept();
ClientThread cthr = new SocketThread (sckt,new MyEventListener(){ 
    void fireSomeEvent(MyEvent event){
    //some code
    }
});

This seems perfectly fine. 这似乎很好。 As long as you're not changing the eventListener there is no concurrency problem that way. 只要您不更改eventListener就不会有并发问题。 But be aware that fireSomeEvent() will be ran from the SocketThread . 但是请注意, fireSomeEvent()将从SocketThread If you're doing something that is not thread-safe there, you might (will) encounter problems. 如果您在执行的操作不是线程安全的,则可能会遇到问题。 So that's where you'll need some sort of synchronization. 这就是您需要某种同步的地方。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM