书籍名 | 说明 | 页码及简述 |
Java多线程编程实战指南(核心篇)黄文海 | 为什么使用多线程进行编程?弄清楚这个问题有助于我们在实践中做到有的放矢,不至于为了使用多线程而使用多线程。下面我们通过几个多线程编程的典型例子去直观感受一下多线程编程。 某款音乐播放手机软件在其启动的时候会专门启动一个线程用于在用户的手机存储中查找音乐文件,然后自动将这些文件名添加到名为“本地音乐”的播放列表。由于从手机存储器(如SD卡)查找特定的文件(音乐文件)是一个相对慢的操作,我们不希望该操作使得该软件启动时显得卡顿。因此,搜索手机本地音乐文件这个任务使用专门的一个线程执行比将其放在负责界面显示的线程(Event Loop线程)中执行给用户带来的体验要好。 Web服务器(如Apache Tomcat)常常在同一时间内会收到多个HTTP请求。为了避免一个请求的处理快慢影响到其他请求的处理,绝大多数服务器都会采用一些专门的线程(工作者线程)负责请求处理,这些线程各自处理分配给它的请求,从而使得一个请求处理的快慢不会对其他请求的处理产生影响(当然,这里的“不影响”是相对的)。这有点像快餐店在点餐顾客多的情况下多开几条点餐线,以减少每个顾客的等待时间。 某系统需要从指定的日志文件中统计出一些信息。而待统计的日志文件中的每个文件可包含上万条记录。若要统计几十个这样的日志文件就会涉及几十万甚至上百万条记录的读取和处理。而读取日志文件所涉及的I/O操作又是一个比较慢的操作。因此,这里我们可以使用一个专门的线程负责日志文件的读取。另外,再使用专门的一个线程去负责对读取到内存中的日志记录数据进行统计。这样,使用多线程编程可以使得该统计工具的统计效率尽可能高。 | P7 耗时任务,音乐播放器, Web服务器响应请求,统计系统日志。 总结: 音乐文件查找、HTTP请求处理、日志文件统计,使用多线程编程可以显著提升系统的响应速度和处理效率,避免单线程带来的性能瓶颈和用户体验问题。 |