Eclipse客户端程序中多线程的使用 - 编程入门网
Exception e) {
}
针对相关联的Job统一进行处理 有时,我们需要对相关联的Job一起处理。例如需要同时取消这些Job,或者等待所有这些Job结束。这 时我们可以使用Job Family。对于相关联的Job,我们可以将它们设置成同一个Job Family。我们需要重 载Job的belongsTo方法以设置一个Job的Job Family。
我们可以使用JobManager的一系列方法针对Job Family进行操作:
Eclipse客户端程序中多线程的使用(6)时间:2011-08-11 IBM 梁 骞线程死锁的调试和解决技巧 一旦我们使用了线程,我们的程序中就有可能有死锁的发生。一旦发生死锁,我们发生死锁的线程会 没有响应,导致我们程序性能下降。如果我们的UI线程发生了死锁,我们的程序会没有响应,必须要重启 程序。所以在我们多线程程序开发中,发现死锁的情况,解决死锁问题对提高我们程序的稳定性和性能极 为重要。 如果我们发现程序运行异常(例如程序没有响应),我们首先要确定是否发生了死锁。通过下面这些 步骤,我们可以确定是否死锁以及死锁的线程: 在Eclipse中以Debug模式运行程序 执行响应的测试用例重现问题 在Eclipse的Debug View中选中主线程(Thread[main]),选择菜单Run->Suspend。这时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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |