`
yan_sa
  • 浏览: 5701 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Handler耗时操作Processor线程阻塞处理办法

    博客分类:
  • mina
阅读更多

 

如果想通过Mina来实现一个自定义协议的网络应用程序,用户只需要编写自定义协议编解码处理器和业务处理逻辑即可。由于每一个Session关联一个Processor处理线程,多个Session共享有限的Processor线程池,如果Handler中的业务逻辑处理比较耗时,会导致后续请求阻塞等待,严重降低效率,所以,一般会向Acceptor的FilterChain添加一个ExecutorFilter来缓解该问题,典型代码如下:

 

Java代码  收藏代码
  1. DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();  
  2. // 日志  
  3. LoggingFilter filter = new LoggingFilter();  
  4. chain.addLast("logger", filter);  
  5. // 协议处理  
  6. chain.addLast("codec"new ProtocolCodecFilter(codecFactory));  
  7. // 线程池  
  8. chain.addLast("executor"new ExecutorFilter(Executors.newCachedThreadPool()));  

 

当server接收到client发送数据后的处理流程如下:

配置之后,IO处理和业务逻辑处理将会使用各自的线程池产生线程使用。如果你的应用每次处理请求的时间较长而又希望应用能够有较好的响应性,那么最好是把处理业务逻辑的任务放到一个新的线程中去执行,而不是在 mina 框架创建的线程中去执行。

原帖地址http://scriptguy.iteye.com/blog/1774032

分享到:
评论

相关推荐

    Handler耗时操作

    标题“Handler耗时操作”暗示我们关注的重点是如何在主线程中通过`Handler`来处理那些可能阻塞UI线程的任务,确保应用的流畅性和用户体验。下面将详细介绍`Handler`的运作原理及其在处理耗时操作中的应用。 1. **...

    Android耗时操作Demo

    在Android应用开发中,"Android耗时操作"是一个重要的主题,因为主线程(UI线程)需要保持流畅,不能被长时间运行的任务阻塞。本文将深入探讨如何利用Handler机制来处理耗时操作,以避免影响用户体验。我们以一个...

    ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    在Android开发中,UI线程(主线程)主要负责用户界面的绘制与交互,因此它必须保持流畅,避免被耗时操作阻塞。为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来...

    自定义Handler-Looper实现线程间通信

    线程间通信的一个常见应用场景是,当我们在后台线程执行耗时操作(如网络请求、数据库操作等)完成后,需要更新UI。此时,我们可以在后台线程中创建一个Message,将结果数据附在Message上,然后通过Handler发送这个...

    Handler多线程处理简单实例

    通常,主线程(UI线程)用于处理用户交互,而后台线程则执行耗时操作。`Handler`通过`Looper`和`MessageQueue`来实现线程间的通信,确保在正确的时间、正确的线程执行特定的任务。 首先,我们创建一个`Handler`实例...

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    ### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...

    Android线程操作 handler demo

    当我们需要执行耗时操作,如网络请求、数据库操作或大量计算时,我们不能在主线程(UI线程)上进行,以免阻塞用户界面,导致应用无响应。此时,Android提供了多种多线程解决方案,其中之一就是Handler机制。本篇将...

    Android 多线程:使用Thread和Handler

    在Android开发中,多线程的应用至关重要,尤其是在处理耗时操作如网络请求、大数据处理等时,为了保证用户界面的流畅性,需要将这些任务放到后台线程执行。本篇文章将详细探讨如何在Android中使用Thread和Handler...

    Handler 消息机制 多线程 应用场景

    3. 线程间的通信:通过Handler,可以在不同的线程间传递数据和控制任务的执行顺序,避免了直接操作线程同步的复杂性。 4. 异步任务处理:在Android应用开发中,网络请求、数据库操作等耗时任务通常在子线程中执行,...

    Handler与Android多线程详解

    下面是一段大家都比较熟悉的代码: 代码如下:Handler ...上述代码中的handler并没有调用线程myThread的start()方法,而是直接调用了run()方法,这也就意味着实际上并没有创建一个新的线程,只是在当前线程中调用run()

    android handler和线程的简单实例

    在这个例子中,新线程执行了耗时操作,然后通过`Handler`将结果以`Message`的形式发送回主线程。主线程中的`handleMessage`方法接收到消息后,更新UI展示结果。 总结一下,`Handler`、`Message`和线程是Android中...

    Android Handler线程间的调度

    在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构成了Android的消息处理...同时,这也有助于提升我们的Android开发技能,尤其是在处理耗时操作和异步任务时,确保UI线程的流畅性。

    android 更新 UI 线程 handler

    而工作线程则用于执行耗时操作,如网络请求、数据库操作等,以避免阻塞主线程。当在工作线程中需要更新UI时,就不能直接操作,必须切换回主线程执行。 Handler是Android中的一个关键组件,它用于在特定线程中发送和...

    Android——显示时间和暂停时间(Handler类操作线程)

    `Handler`类是Android中处理消息和线程交互的核心工具,它允许我们在主线程中执行特定的操作,比如更新UI,而这些操作通常由工作线程触发。本篇文章将深入探讨如何利用`Handler`来实现显示和暂停时间的功能。 `...

    010_android 之UI线程阻塞及其优化

    2. 网络请求:网络I/O操作应该在子线程中进行,否则会阻塞UI线程。 3. 数据库操作:访问SQLite数据库,尤其是涉及大量数据的操作,应避免在主线程执行。 4. 文件读写:类似地,文件系统的读写操作不应在UI线程进行。...

    使用Handler.post()对线程进行管理,实现同步

    这里使用post()将多个线程提交到Handler的MessageQueue里面,这样线程就会顺序执行,这样任务所操作的对象在同一时间里就不会有多个线程同时操作了,也就实现了同步操作了。同时注意,队列是同步操作的一个重要手段...

    android线程 Handler Message Queue AsyncTask线程模型 线程交互 + 修改Button样式 示例 最终easy整合版

    为了防止UI阻塞,开发者需要在其他线程中执行耗时操作。主要有以下几种线程模型: - **Worker Thread**:开发者自定义的工作线程,用于处理耗时任务。 - **Intent Service**:为一次性后台任务设计,当任务完成后...

    Android Handler消息处理顺序分析

    在进行Android开发时,Handler常用于处理耗时操作,如网络请求或数据库操作,以避免阻塞主线程导致应用无响应。同时,配合使用`Handler.postDelayed()`还可以实现定时任务。 为了更好地理解Handler的工作原理,可以...

    Android利用handler在线程之间传递代码

    总结来说,Handler机制是Android多线程编程的关键工具之一,它使得开发者能够方便地在线程间传递信息,实现异步处理,确保UI线程不被阻塞,提升用户体验。熟练掌握Handler的使用,对任何Android开发者都至关重要。

    handler线程

    - **作用**:在 Android 应用程序中,除了主线程之外还可以创建多个工作线程来执行耗时的任务,从而避免阻塞 UI 线程。 - **实现**:通过继承 `Thread` 类或者实现 `Runnable` 接口来创建一个新的线程。 #### 三...

Global site tag (gtag.js) - Google Analytics