关于异步编程, JDK提供了Future接口, 但是此接口存在以下问题 :
A线程发起异步请求, A线程调用get()方法会被阻塞, 虽然提供了超时的get(timeout)但也无法满足要求....所以打印顺序应该是先xxx再yyy
那么为什么打印结果与我们期望的不同呢? 我们来分析下....根据目前的代码结构, 执行channelActive方法内代码的线程是IO线程, 如果读过我之前的文章的小伙伴, 应该知道我说的这个IO线程是什么意思....得到我们想要的结果: 先打印xxx 再打印yyy
改动之后, 执行channelActive方法的线程(姑且叫A线程)不再是IO线程, 而是businessGroup中的某个线程....代码改动前与改动后不同点就是多了一个A线程, 它负责执行channelActive方法. A线程只会把数据写入到IO线程对应的taskQueue, 具体的写操作必须且只能由IO线程来完成.