概述
多人聊天室涉及到几方面的问题,首先是多个客户端同时连接到服务器上,典型的设计方案是,有一个线程监听客户端事件,一个线程读取数据、广播
demo
线程池创建
监听线程:
readPool.execute(new ReadEventHandler(key))的意思为,将客户端监听到的数据交由ReadEventHandler线程处理、广播
读取线程:
有些读者会有些疑问,在多线程中阻塞队列是如何使用的?
首先来看这个类,这个类实现了什么呐?往阻塞队列里存放数据对吗?那么还需要往队列里取数据,对吗?那区数据的类怎么写呐?来看
首先我们需要一个线程不断的尝试从阻塞队列中取数据,所以有如下方法,通过Thread.currentThread().isInterrupted()方法判断线程是否中断,不中断则不断的从中取数据
最后我们只需要保证存数据线程和取数据线程操作同一个队列即可,要实现这个,只需要在主入口方法中创建队列,传入
为此他们保证了不同线程使用的是同一个队列
看一下线程的基本设计,首先数据的初始化放到了Manager类中,在Manager类中继承了Thread类,从写run方法,将从队列中取到的数据丢到线程池中
一般来说,在线程中一般通过new或
SpringContextUtil.getBean(name)获取相应的处理类
如此