知识大全 Java多线程的优先级

Posted

篇首语:同时赶两只兔,一只也捉不到。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java多线程的优先级相关的知识,希望对你有一定的参考价值。

Java多线程的优先级  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  优先级  线程的优先级(Priority)告诉调试程序该线程的重要程度有多大 如果有大量线程都被堵塞 都在等候运行 调试程序会首先运行具有最高优先级的那个线程 然而 这并不表示优先级较低的线程不会运行(换言之 不会因为存在优先级而导致死锁) 若线程的优先级较低 只不过表示它被准许运行的机会小一些而已   可用getPriority()方法读取一个线程的优先级 并用setPriority()改变它 在下面这个程序片中 大家会发现计数器的计数速度慢了下来 因为它们关联的线程分配了较低的优先级   //: Counter java  // Adjusting the priorities of threads  import java awt *;  import java awt event *;  import java applet *;  class Ticker extends Thread    private Button    b = new Button( Toggle )    incPriority = new Button( up )    decPriority = new Button( down );   private TextField    t = new TextField( )    pr = new TextField( ); // Display priority   private int count = ;   private boolean runFlag = true;   public Ticker (Container c)    b addActionListener(new ToggleL());   incPriority addActionListener(new UpL()); decPriority addActionListener(new DownL());   Panel p = new Panel();   p add(t);   p add(pr);   p add(b);   p add(incPriority);   p add(decPriority);   c add(p);      class ToggleL implements ActionListener    public void actionPerformed(ActionEvent e)    runFlag = !runFlag;         class UpL implements ActionListener    public void actionPerformed(ActionEvent e)    int newPriority = getPriority() + ;   if(newPriority > Thread MAX_PRIORITY)   newPriority = Thread MAX_PRIORITY;   setPriority(newPriority);         class DownL implements ActionListener    public void actionPerformed(ActionEvent e)    int newPriority = getPriority() ;   if(newPriority < Thread MIN_PRIORITY)   newPriority = Thread MIN_PRIORITY;   setPriority(newPriority);         public void run()    while (true)    if(runFlag)    t setText(Integer toString(count++));   pr setText(   Integer toString(getPriority()));      yield();          public class Counter extends Applet    private Button    start = new Button( Start )    upMax = new Button( Inc Max Priority )    downMax = new Button( Dec Max Priority );   private boolean started = false;   private static final int SIZE = ;   private Ticker [] s = new Ticker [SIZE];   private TextField mp = new TextField( );   public void init()    for(int i = ; i < s.length; i++)   s[i] = new Ticker2(this);   add(new Label("MAX_PRIORITY = "   + Thread.MAX_PRIORITY));   add(new Label("MIN_PRIORITY = "   + Thread.MIN_PRIORITY));   add(new Label("Group Max Priority = "));   add(mp);    add(start);   add(upMax); add(downMax);   start.addActionListener(new StartL());   upMax.addActionListener(new UpMaxL());   downMax.addActionListener(new DownMaxL());   showMaxPriority();   // Recursively display parent thread groups:   ThreadGroup parent =    s[0].getThreadGroup().getParent();   while(parent != null)    add(new Label(   "Parent threadgroup max priority = "   + parent.getMaxPriority()));   parent = parent.getParent();         public void showMaxPriority()    mp.setText(Integer.toString(   s[0].getThreadGroup().getMaxPriority()));      class StartL implements ActionListener    public void actionPerformed(ActionEvent e)    if(!started)    started = true;   for(int i = 0; i < s.length; i++)   s[i].start();            class UpMaxL implements ActionListener    public void actionPerformed(ActionEvent e)    int maxp =    s[0].getThreadGroup().getMaxPriority();   if(++maxp > Thread.MAX_PRIORITY)   maxp = Thread.MAX_PRIORITY;   s[0].getThreadGroup().setMaxPriority(maxp);   showMaxPriority();         class DownMaxL implements ActionListener    public void actionPerformed(ActionEvent e)    int maxp =    s[0].getThreadGroup().getMaxPriority();   if(--maxp < Thread.MIN_PRIORITY)   maxp = Thread.MIN_PRIORITY;   s[0].getThreadGroup().setMaxPriority(maxp);   showMaxPriority();         public static void main(String[] args)    Counter5 applet = new Counter5();   Frame aFrame = new Frame("Counter5");   aFrame.addWindowListener(   new WindowAdapter()    public void windowClosing(WindowEvent e)    System.exit(0);      );   aFrame.add(applet, BorderLayout.CENTER);   aFrame.setSize(300, 600);   applet.init();   applet.start();   aFrame.setVisible(true);      ///:~  Ticker采用本章前面构造好的形式,但有一个额外的TextField(文本字段),用于显示线程的优先级;以及两个额外的按钮,用于人为提高及降低优先级。WInGWit.  也要注意yield()的用法,它将控制权自动返回给调试程序(机制)。若不进行这样的处理,多线程机制仍会工作,但我们会发现它的运行速度慢了下来(试试删去对yield()的调用)。亦可调用sleep(),但假若那样做,计数频率就会改由sleep()的持续时间控制,而不是优先级。  Counter5中的init()创建了由10个Ticker2构成的一个数组;它们的按钮以及输入字段(文本字段)由Ticker2构建器置入窗体。Counter5增加了新的按钮,用于启动一切,以及用于提高和降低线程组的最大优先级。除此以外,还有一些标签用于显示一个线程可以采用的最大及最小优先级;以及一个特殊的文本字段,用于显示线程组的最大优先级(在下一节里,我们将全面讨论线程组的问题)。最后,父线程组的优先级也作为标签显示出来。  按下“up”(上)或“down”(下)按钮的时候,会先取得Ticker2当前的优先级,然后相应地提高或者降低。  运行该程序时,我们可注意到几件事情。首先,线程组的默认优先级是5。即使在启动线程之前(或者在创建线程之前,这要求对代码进行适当的修改)将最大优先级降到5以下,每个线程都会有一个5的默认优先级。  最简单的测试是获取一个计数器,将它的优先级降低至1,此时应观察到它的计数频率显著放慢。现在试着再次提高优先级,可以升高回线程组的优先级,但不能再高了。现在将线程组的优先级降低两次。线程的优先级不会改变,但假若试图提高或者降低它,就会发现这个优先级自动变成线程组的优先级。此外,新线程仍然具有一个默认优先级,即使它比组的优先级还要高(换句话说,不要指望利用组优先级来防止新线程拥有比现有的更高的优先级)。  最后,试着提高组的最大优先级。可以发现,这样做是没有效果的。我们只能减少线程组的最大优先级,而不能增大它。 cha138/Article/program/Java/gj/201311/27587

相关参考

知识大全 破除Java神话之线程按优先级唤醒

破除Java神话之线程按优先级唤醒  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 Java2入门经典教程 11.3线程优先级[2]

Java2入门经典教程11.3线程优先级[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 Java2入门经典教程 11.3线程优先级[1]

Java2入门经典教程11.3线程优先级[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 线程的调度-优先级

Java线程:线程的调度-优先级  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java线程线程

知识大全 Java的多线程-实现多线程及线程的同步

Java的多线程-实现多线程及线程的同步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一.实现

知识大全 Java多线程编程基础之线程和多线程

Java多线程编程基础之线程和多线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着计算机技

知识大全 Java多线程如何创建多个线程

Java多线程如何创建多个线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java多线程的同

知识大全 超线程多核心下Java多线程编程分析

超线程多核心下Java多线程编程分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一Java环

知识大全 超线程多核心下Java多线程编程技术分析[4]

超线程多核心下Java多线程编程技术分析[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 超线程多核心下Java多线程编程技术分析[3]

超线程多核心下Java多线程编程技术分析[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb