左晓为主开发手持机充值管理机
zuojincheng
2025-03-31 793d4ee43f963935919f2ebf4b743e924c169e33
easysocket/src/main/java/com/easysocket/connection/dispatcher/CallbackResponseDispatcher.java
@@ -29,7 +29,7 @@
     * 保存发送的每个回调消息的监听实例,key为回调标识callbackId,这样回调消息有反馈的时候,就可以找到并调用
     * 对应的监听对象
     */
    private Map<String, SuperCallBack> callbacks = new HashMap<>();
    private volatile Map<String, SuperCallBack> callbacks = new HashMap<>();
    /**
     * 保存需要进行超时检测的请求,这是一个延时队列,元素超时的时候会被取出来
     */
@@ -71,17 +71,24 @@
    public void engineThread() {
        try {
            if (timeoutExecutor == null || timeoutExecutor.isShutdown()) {
                //创建一个只有一个线程的线程池。这个线程池会顺序执行提交的任务,并保证任务之间的顺序性。
                timeoutExecutor = Executors.newSingleThreadExecutor();
                timeoutExecutor.execute(new Runnable() {
                    @Override
                    public void run() {
                        LogUtil.d("任务超时轮询");
                        try {
                            // 只有超时的元素才会被取出,没有的话会被等待
                            timeoutItem item = timeoutQueue.take();
                            if (item != null) {
                                LogUtil.d("超时任务ID:" + item.callbackId);
                                SuperCallBack callBack = callbacks.remove(item.callbackId);
                                if (callBack != null)
                                if (callBack != null) {
                                    LogUtil.d("超时任务ID:" + item.callbackId + "callBack != null");
                                    callBack.onError(new RequestTimeOutException("request timeout"));
                                }else {
                                    LogUtil.d("超时任务ID:" + item.callbackId + "  callBack == null");
                                }
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();