• eclipsejava > eclipse使用:Eclipse客户端程序中多线程的
  • eclipse使用:Eclipse客户端程序中多线程的

    免费下载 下载该文档 文档格式:PDF   更新时间:2010-05-01   下载次数:0   点击次数:1
    文档基本属性
    文档语言:
    文档格式:pdf
    文档作者:Kevin Fan
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    eclipse使用:Eclipse客户端程序中多线程的 使用
    疯狂代码 http://CrazyCoder.cn/ :http:/CrazyCoder.cn/Java/Article47217.html 本文分析了Eclipse中多线程实现讨论了在Eclipse客户端开发中应用多线程思路方法和要注意问题同 时也讨论了多线程些调试和问题解决思路方法 Eclipse作为个开发平台使用越来越广泛基于Eclipse Rich Client Platform开发客户端也越来越多在当今越来越复杂应用环境中我们客户端不可避免要同时进行多任务处 理个优异客户端都会允许用户同时启动多个任务从而大大提高用户工作效率以及用户体验本文中我们来谈谈 Eclipse中实现多任务方式 在我们基于EclipseJava中我们有很多种方式提供多任务实现熟悉Java朋友立即会想到JavaThread类这是 Java中使用最多个实现多任务类Eclipse平台为多任务处理提供了自己API,那就是Job以及UIJobEclipse中Job是 对Java Thread个封装为我们实现多任务提供了更方便接口以下是Job基本使用方法: 清单 1. Job使用方法举例 Job job = Job("Job Name"){ protected IStatus run(IProgressMonitor monitor) { // 在这里添加你任务代码 Status.OK_STATUS; } }; job.schedule(delayTime); 在Eclipse中我们也会经常用到Display.asynchExec 和Display.synchExec来启动任务执行这两个思路方法 主要为了方便我们完成界面操作任务以下是Display.asynchExec使用方法Display.synchExec和它类似 清单 2. Display.synchExec使用方法举例 Display.getDefault.asyncExec( Runnable { public void run { // 在这里添加你任务代码 } }); 通常在Eclipse中我们最好使用Eclipse提供Job接口来实现多任务而不是使用Javathread为什么呢 主要
    有以下几个原因: Job是可重用工作单元个Job我们可以很方便让它多次执行 Job提供了方便接口使得我们在处理中能够很方便和外界交流报告当前执行进度 Eclipse提供了相应机制使得员可以方便介入Job调度例如我们可以方便实现每次只有个同类型Job在运行 Eclipse缺省提供了Job管理可以查看当前所有Job和它们进度也提供UI终止,暂停,继续指定Job 使用Job可以提高性能节省线程创建和销毁开销Eclipse中Job封装了线程池实现当我们启动个Job时 Eclipse不会马上新建个Thread它会在它线程池中寻找是否有空闲线程如果有空闲线程就会直接用空闲线程运行 你Job个Job终止时它所对应线程也不会立即终止它会被返回到线程池中以备重复利用这样我们可以节省创建和 销毁线程开销 下面我们从几个方面来讨论Eclipse中Job实现和使用方面问题 Eclipse中Job实现 Eclipse核心包中提供了个JobManager类它实现了IJobManager接口Eclipse中Job管理和调度都是由 JobManager来实现 JobManager维护有个线程池用来运行Job当我们Jobschedule思路方法后这个Job会被 JobManager首先放到个Job运行等待队列中去的后JobManager会通知线程池有新Job加入了运行等待队列线 程池会找出个空闲线程来运行Job如果没有空闲线程线程池会创建个新线程来运行Job旦Job运行完毕运行Job线 程会返回到线程池中以备下次使用从上面Job运行过程我们可以看到JobManager介入了个Job运行全过程它了 解Job什么时候开始什么时候结束每时候Job运行状态JobManager将这些Job运行信息以接口方式提供给用户 同时它也提供了接口让我们可以介入Job调度等从而我们拥有了更加强大控制Job能力 为了我们更方便了解Job所处状态JobManager设置Job个状态标志位,我们可以通过JobgetState思路方 法获得Job当前状态值以了解其状态: NONE:当个Job刚构造时候Job就会处于这种状态当个Job执行完毕(包括被取消)后Job状态也会变回这种状 态 WAITING:当我们了Jobshedule思路方法JobManager会将Job放入等待运行Job队列这时Job状态为 WAITING.
    RUNNING:当个Job开始执行Job状态会变为RUNNING SLEEPING:当我们Jobsleep思路方法后Job会变成这状态当我们schudule思路方法时候带上延时参数Job状 态也会转入这状态在这段延时等待时间中Job都处于这状态这是种睡眠状态Job在这种状态中时不能马上转入运 行我们可以Jobwakeup思路方法来将Job唤醒这样Job又会转入WAITING状态等待运行 Eclipse中UI线程 另外在Eclipse线程处理中有个UI线程概念Eclipse中主线程是个特殊线程启动后会先执行这个线程也就是我 们所在线程作为桌面应用我们主线程主要负责界面响应以及绘制界面元素所以通常我们也叫它UI线程 以下代码编过SWT应用读者会非常熟悉它般出现在结尾下面来仔细分析下它详细情况 //当窗口未释放时 while (!shell.isDisposed) { //如果display对象事件队列中没有了等待事件就让该线程进入等待状态 (!display.readAndDispatch) display.sleep; } 上面实际上就是我们UI线程处理逻辑:当启动后UI线程会读取事件等待队列看有没有事件等待处理如果有它 会进行相应处理如果没有它会进入睡眠状态如果有新事件到来它又会被唤醒进行处理UI线程所需要处理事件包 括用户鼠标和键盘操作事件操作系统或中发出绘制事件般来说处理事件过程也就是响应用户操作过程 个好桌面应用需要对用户操作作出最快响应也就是说我们UI线程必须尽快处理各种事件从我们角度来说 在UI线程中我们不能进行大量计算或者等待否则用户操作事件得不到及时处理通常如果有大量计算或者需要长 时间等待(例如进行网络操作或者数据库操作)时我们必须将这些长时间处理单独开辟出个线程来执行这样虽然后 台运行着但也不会影响界面上操作 除主线程的外所有线程都是非UI线程在Eclipse中我们所有对界面元素操作都必须放到UI线程中来执行否则 会抛出Exception所以我们要区分出UI线程和非UI线程保证我们对UI操作都在UI线程中执行 如何判断当前线程是否UI线程: 你可以通过Display.getCurrent来知道当前线程是否是UI线程如果 Display.getCurrent返回为空,表示当前不是UI线程 Eclipse中使用线程几种典型情况

    下一页

  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 PDF格式下载
  • 您可能感兴趣的
  • eclipsejava  eclipsejavaee  javaeclipse下载  javaeclipsesdk  eclipseforjava  eclipse导入java  eclipsejava打包  eclipse编写java  javaeclipse环境  eclipsejava配置