快速业务通道

Eclipse客户端程序中多线程的使用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
Exception e) {    }

针对相关联的Job统一进行处理

有时,我们需要对相关联的Job一起处理。例如需要同时取消这些Job,或者等待所有这些Job结束。这 时我们可以使用Job Family。对于相关联的Job,我们可以将它们设置成同一个Job Family。我们需要重 载Job的belongsTo方法以设置一个Job的Job Family。

Private Object MY_JOB_FAMILY = new Object(); Job job = new Job(“Job Name”){ protected IStatus run(IProgressMonitor monitor) {    // 在这里添加你的任务代码      return Status.OK_STATUS;    }    public boolean belongsTo(Object family){      return MY_JOB_FAMILY.equals(family);    } };

我们可以使用JobManager的一系列方法针对Job Family进行操作:

Job.getJobManager().cancel(MY_JOB_FAMILY); //取消所有属于MY_JOB_FAMILY的所有Job Job.getJobManager().join(MY_JOB_FAMILY); //等待属于MY_JOB_FAMILY的所有Job结束 Job.getJobManager().sleep(MY_JOB_FAMILY); //将所有属于MY_JOB_FAMILY的Job转入睡眠状态 Job.getJobManager().wakeup(MY_JOB_FAMILY); //将所有属于MY_JOB_FAMILY的Job唤醒

Eclipse客户端程序中多线程的使用(6)

时间:2011-08-11 IBM 梁 骞

线程死锁的调试和解决技巧

一旦我们使用了线程,我们的程序中就有可能有死锁的发生。一旦发生死锁,我们发生死锁的线程会 没有响应,导致我们程序性能下降。如果我们的UI线程发生了死锁,我们的程序会没有响应,必须要重启 程序。所以在我们多线程程序开发中,发现死锁的情况,解决死锁问题对提高我们程序的稳定性和性能极 为重要。

如果我们发现程序运行异常(例如程序没有响应),我们首先要确定是否发生了死锁。通过下面这些 步骤,我们可以确定是否死锁以及死锁的线程:

在Eclipse中以Debug模式运行程序

执行响应的测试用例重现问题

在Eclipse的Debug View中选中主线程(Thread[main]),选择菜单Run->Suspend。这时Eclipse会 展开主线程的函数调用栈,我们就可以看到当前主线程正在执行的操作。

通常,Eclipse在等待用户的操作,它的函数调用栈会和以下类似:

图片示例

Eclipse客户端程序中多线程的使用 - 编程入门网

如果主线程发生死锁,函数调用栈的最上层一般会是你自己的函数调用,你可以查看一下你当前的函 数调用以确定主线程在等待什么

使用同样的方法查看其他线程,特别是那些等待UI线程的线程

我们需要找出当前线程相互的等待关系,以便找出死锁的原因。我们找出死锁的线程后就可以针对不 同情况进行处理:

减小锁的粒度,增加并发性

调整资源请求的次序

将需要等待资源的任务放到独立的线程中执行

Job使用中要注意的问题

不要在Job中使用Thread.sleep方法。如果你想要让Job进入睡眠状态,最好用Job的sleep方法。虽然 ,使用Thread.sleep和Job的sleep方法达到的效果差不多,但是它们实现的方式完全不同,对系统的影响 也不一样。我们知道Eclipse中Job是由Eclipse的JobManager来管理的。如果我们调用Job的sleep方法, JobManager会将Job转入睡眠状态,与其对应的线程也会重新放入线程池等待运行其他Job。而如果我们在 Job中直接调用Thread.sleep方法,它会直接使运行Job的线程进入睡眠状态,其他Job就不可能重用这个 线程了。同时,虽然运行该Job的线程进入了睡眠状态,Job的状态还是Running(运行状态),我们也不 能用Job的wakeup方法唤醒该Job了

Job的取消。一般我们会直观的认为,一旦调用Job的cancel方法,Job就会停止运行。实际上,这并不 一定正确,当Job处于不同的状态时,我们调用Job的cancel方法所起的效果是不同的。当Job在WAITING状 态和SLEEPING状态时,一旦我们调用cancel方法,JobManager会将Job直接从等待运行的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号