Need an interruptable way to listen for UDP packets in a worker thread

女生的网名这么多〃 提交于 2019-12-02 10:34:53

My recommendation:

private DatagramSocket mSocket;

@Override
public void run() {
    Exception ex = null;
    try {
        // read while not interrupted
        while (!interrupted()) {
            ....
            mSocket.receive(...); // excepts when interrupted
        }
    } catch (Exception e) {
        if (interrupted())
            // the user did it
        else
            ex = e;
    } finally {
        // always release
        release();

        // rethrow the exception if we need to
        if (ex != null)
            throw ex;
    }
}

public void release() {
    // causes exception if in middle of rcv 
    if (mSocket != null) {
        mSocket.close();
        mSocket = null;
    }
}

@Override
public void interrupt() {
    super.interrupt();
    release();
}

clean cut, simple, always releases and interrupting stops you cleanly in 2 cases.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!