快速业务通道

Java多线程问题及处理笔记 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

Java多线程问题及处理笔记

时间:2010-12-09 blogjava

1.死锁

多线程编程在实际的网络程序开发中,在客户端程序实现中使用的比较简单 ,但是在服务器端程序实现中却不仅是大量使用,而且会出现比客户端更多的问 题。

另外一个容易在服务器端出现的多线程问题是——死锁。死锁指两个或两个 以上的线程为了使用某个临界资源而无限制的等待下去。还是以前面卫生间的例 子来说明死锁,例如两个人都同时到达卫生间,而且两个人都比较礼貌,第一个 人和第二个人说:你先吧,第二个人和第一个人说:你先吧。这两个人就这样一 直在互相礼让,谁也不进入,这种现象就是死锁。这里的两个人就好比是线程, 而卫生间在这里就是临界资源,而由于这两个线程在一直谦让,谁也不使用临界 资源。

死锁不仅使程序无法达到预期实现的功能,而且浪费系统的资源,所以在服 务器端程序中危害比较大,在实际的服务器端程序开发中,需要注意避免死锁。

而死锁的检测比较麻烦,而且不一定每次都出现,这就需要在测试服务器端 程序时,有足够的耐心,仔细观察程序执行时的性能检测,如果发现执行的性能 显著降低,则很可能是发生了死锁,然后再具体的查找死锁出现的原因,并解决 死锁的问题。

死锁出现的最本质原因还是逻辑处理不够严谨,在考虑时不是很周全,所以 一般需要修改程序逻辑才能够很好的解决死锁。

2. 线程优先级

在日常生活中,例如火车售票窗口等经常可以看到“XXX优先”,那么多线程 编程中每个线程是否也可以设置优先级呢?

在多线程编程中,支持为每个线程设置优先级。优先级高的线程在排队执行 时会获得更多的CPU执行时间,得到更快的响应。在实际程序中,可以根据逻辑 的需要,将需要得到及时处理的线程设置成较高的优先级,而把对时间要求不高 的线程设置成比较低的优先级。

在Thread类中,总计规定了三个优先级,分别为:

l  MAX_PRIORITY——最高优先级

l  NORM_PRIORITY——普通优先级,也是默认优先级

l  MIN_PRIORITY——最低优先级

在前面创建的线程对象中,由于没有设置线程的优先级,则线程默认的优先 级是NORM_PRIORITY,在实际使用时,也可以根据需要使用Thread类中的 setPriority方法设置线程的优先级,该方法的声明为:

public final void setPriority(int newPriority)

假设t是一个初始化过的线程对象,需要设置t的优先级为最高,则实现的代 码为:

t. setPriority(Thread. MAX_PRIORITY);

这样,在该线程执行时将获得更多的执行机会,也就是优先执行。如果由于 安全等原因,不允许设置线程的优先级,则会抛出SecurityException异常。

下面使用一个简单的输出数字的线程演示线程优先级的使用,实现的示例代 码如下:

package priority; /**   * 测试线程优先级 * author by http://www.bt285.cn http://www.5a520.cn   */ public class TestPriority {          public static void main(String[] args) {                    PrintNumberThread p1 = new PrintNumberThread("高优先级");                    PrintNumberThread p2 = new PrintNumberThread("普通优先级");                    PrintNumberThread p3 = new PrintNumberThread("低优先级");                    p1.setPriority (Thread.MAX_PRIORITY);                    p2.setPriority (Thread.NORM_PRIORITY);                    p3.setPriority (Thread.MIN_PRIORITY);               

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号