当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

Java多线程问题及处理笔记[Java编程]

赞助商链接



  本文“Java多线程问题及处理笔记[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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);

                   p1.start();

                   p2.start();

                   p3.start();

         }

}

package priority;

/**

  * 输出数字的线程

  */

public class PrintNumberThread extends Thread {

         String name;

         public PrintNumberThread(String name){

                   this.name = name;

         }

         public void run(){

                   try{

                            for(int i = 0;i < 10;i++){

                                      System.out.println(name + ":" + i);

                            }

                   }catch(Exception e){}

         }

}


  以上是“Java多线程问题及处理笔记[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .