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



我里面有套接字的线程。当 soket 收到一些数据时,我需要触发事件(使用我的订阅事件对象)。事件侦听器是从主线程(添加到某个列表?可以吗?

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
    }
});

似乎很好。只要您不更改eventListener就不存在并发问题。但请注意,fireSomeEvent()将从SocketThread运行。如果您在那里执行的操作不是线程安全的,则可能会(将)遇到问题。所以这就是你需要某种同步的地方。

最新更新