当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 在本文中,我们将简单观察一下多线程应用程序开发中公共线程用法,同时,解释一下生产者-消费者编程方案,并研究一个实际的示例来向您演示 Consumer 类是如何工作的。
 

 

 ·线程池与工作队列    »显示摘要«
    摘要:为什么要用线程池? 诸如 web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 http、ftp 或 pop)、通过 jms 队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的。构建服务器应用程序的......
 ·线程与swing    »显示摘要«
    摘要:本文包括以下内容:单线程规则:swing线程在同一时刻仅能被一个线程所访问。一般来说,这个线程是事件派发线程(event-dispatching thread)。规则的例外:有些操作保证是线程安全的。事件分发:如果你需要从事件处理(event-handling)或绘制代码以外的地方访问ui,那么你可以使用swingutilities类的invokelater()或invokeandwait()方法......


Java技术:使您轻松地进行多线程应用程序编程

在本文中,我们将简单观察一下多线程应用程序开发中公共线程用法,同时,解释一下生产者-消费者编程方案,并研究一个实际的示例来向您演示 consumer 类是如何工作的.

【程序编程相关:思科推出第一款定制的渠道通信工具

【推荐阅读:朗讯阿尔卡特将合并 分析师点评朗讯包袱多

多线程基础知识 【扩展信息:私登他人家庭Wi-Fi网 美国一男子被罚

多线程是一种使应用程序能同时处理多个操作的编程技术.通常有两种不同类型的多线程操作使用多个线程:

适时事件,当作业必须在特定的时间或在特定的间隔内调度执行时

后台处理,当后台事件必须与当前执行流并行处理或执行时

适时事件的示例包括程序提醒.超时事件以及诸如轮询与刷新之类的重复性操作.后台处理的示例包括等待发送的包或等待处理的已接收的消息.

生产者-消费者关系

生产者-消费者方案很适合于后台处理类别的情况.这些情况通常围绕一个作业“生产者”方与一个作业“消费者”方.当然,关于作业并行执行还有其它考虑事项.在大多数情况下,对于使用同一资源的作业,应以“先来先服务”的方式按顺序处理,这可以通过使用单线程的消费者轻松实现.通过使用这种方法,我们使用单个线程来访问单个资源,而不是用多个线程来访问单个资源.

要启用标准消费者,当作业到来时创建一个作业队列来存储所有作业.生产者线程通过将新对象添加到消费者队列来交付这个要处理的新对象.然后消费者线程从队列取出每个对象,并依次处理.当队列为空时,消费者进入休眠.当新的对象添加到空队列时,消费者会醒来并处理该对象.因为大多数应用程序喜欢顺序处理方式,所以消费者通常是单线程的.

问题:代码重复

因为生产者-消费者方案很常用,所以在构建应用程序时它可能会出现几次,这导致了代码重复.我们认识到,这显示了在应用程序开发过程期间多次使用了生产者-消费者方案的问题.

当第一次需要生产者-消费者行为时,通过编写一个采用一个线程与一个队列的类来实现该行为.当第二次需要这种行为时,我们着手从头开始实现它,但是接着认识到以前已经做过这件事了.我们复制了代码并修改了处理对象的方式.当第三次在该应用程序中实现生产者-消费者行为时,很明显我们复制了太多代码.我们决定,需要一个适用的 consumer 类,它将处理我们所有的生产者-消费者方案.

我们的解决方案:consumer 类

我们创建 consumer 类的目的是:在我们的应用程序中,消除这种代码重复 ? 为每个生产者-消费者实例编写一个新作业队列与消费者线程来解决这个问题.有了适当的 consumer 类,我们所必须做的只是编写专门用于作业处理(业务逻辑)的代码.这使得我们的代码更清晰.更易于维护以及更改起来更灵活.

我们对 consumer 类有如下需求:

重用:我们希望这个类包括所有东西.一个线程.一个队列以及使这两者结合在一起的所有逻辑.这将使我们只须编写队列中“消费”特定作业的代码.(因而,例如,程序员使用 consumer 类时,将重载 onconsume(objectjobtobeconsumed) 方法.)

队列选项:我们希望能够设置将由 consumer 对象使用的队列实现.
...   下一页
 ·java程序中的多线程(1)    »显示摘要«
    摘要:为什么会排队等待? 下面的这个简单的 java 程序完成四项不相关的任务。这样的程序有单个控制线程,控制在这四个任务之间线性地移动。此外,因为所需的资源 ? 打印机、磁盘、数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含明显的等待时间。因此,程序在访问数据库之前必须等待打印机完成打印文件的任务,等等。如果您正在等待程序的完成,则这是对计算资源和您的时间的一种拙劣使用......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE