|  |  | 
 |  |  |      * 保存发送的每个回调消息的监听实例,key为回调标识callbackId,这样回调消息有反馈的时候,就可以找到并调用 | 
 |  |  |      * 对应的监听对象 | 
 |  |  |      */ | 
 |  |  |     private Map<String, SuperCallBack> callbacks = new HashMap<>(); | 
 |  |  |     private volatile Map<String, SuperCallBack> callbacks = new HashMap<>(); | 
 |  |  |     /** | 
 |  |  |      * 保存需要进行超时检测的请求,这是一个延时队列,元素超时的时候会被取出来 | 
 |  |  |      */ | 
 |  |  | 
 |  |  |     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(); |