
正文
java代码执行优先级 java运算符
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Java程序中线程优先级
优先级不能决定那个线程先运行,优先级高只是较大提高该线程的运行几率,但是并不是一定的,线程的运行,是看cpu将时间片段给了那个线程,那个线程就先跑,这是我们程序控制了不了。所以,你问题:答案是不确定
相关问答
Q1: Java多线程的优先级
优先级线程java代码执行优先级的优先级(Priority)告诉调试程序该线程的重要程度有多大 如果有大量线程都被堵塞 都在等候运行 调试程序会首先运行具有最高优先级的那个线程 然而 这并不表示优先级较低的线程不会运行(换言之 不会因为存在优先级而导致死锁) 若线程的优先级较低 只不过表示它被准许运行的机会小一些而已 可用getPriority()方法读取一个线程的优先级 并用setPriority()改变它 在下面这个程序片中 大家会发现计数器的计数速度慢java代码执行优先级了下来 因为它们关联的线程分配了较低的优先级 //: Counter java// Adjusting the priorities of threadsimport 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采用本章前面构造好的形式java代码执行优先级,但有一个额外的TextField(文本字段),用于显示线程的优先级java代码执行优先级;以及两个额外的按钮,用于人为提高及降低优先级。WInGWit.也要注意yield()的用法,它将控制权自动返回给调试程序(机制)。若不进行这样的处理,多线程机制仍会工作,但java代码执行优先级我们会发现它的运行速度慢了下来(试试删去对yield()的调用)。亦可调用sleep(),但假若那样做,计数频率就会改由sleep()的持续时间控制,而不是优先级。Counter5中的init()创建了由10个Ticker2构成的一个数组;它们的按钮以及输入字段(文本字段)由Ticker2构建器置入窗体。Counter5增加了新的按钮,用于启动一切,以及用于提高和降低线程组的最大优先级。除此以外,还有一些标签用于显示一个线程可以采用的最大及最小优先级;以及一个特殊的文本字段,用于显示线程组的最大优先级(在下一节里,我们将全面讨论线程组的问题)。最后,父线程组的优先级也作为标签显示出来。按下“up”(上)或“down”(下)按钮的时候,会先取得Ticker2当前的优先级,然后相应地提高或者降低。运行该程序时,我们可注意到几件事情。首先,线程组的默认优先级是5。即使在启动线程之前(或者在创建线程之前,这要求对代码进行适当的修改)将最大优先级降到5以下,每个线程都会有一个5的默认优先级。最简单的测试是获取一个计数器,将它的优先级降低至1,此时应观察到它的计数频率显著放慢。现在试着再次提高优先级,可以升高回线程组的优先级,但不能再高了。现在将线程组的优先级降低两次。线程的优先级不会改变,但假若试图提高或者降低它,就会发现这个优先级自动变成线程组的优先级。此外,新线程仍然具有一个默认优先级,即使它比组的优先级还要高(换句话说,不要指望利用组优先级来防止新线程拥有比现有的更高的优先级)。最后,试着提高组的最大优先级。可以发现,这样做是没有效果的。我们只能减少线程组的最大优先级,而不能增大它。 lishixinzhi/Article/program/Java/gj/201311/27587
Q2: 求教java 线程优先级和执行顺序问题!!
优先级高的线程是获得较多的执行机会,优先级低的线程是获得较少的执行机会。你先启动的优先级低的几个线程,最后才启动的优先级高的。优先级低的线程是可以先执行的,只不过时间短罢了。如果你这样写,是测试不出优先级高低的,应该在run() 中执行循环输出(比如1-100)才能看出执行时间长短,否则一下就执行完了。
虽然java 提供了10个优先级,但这些优先级需要操作系统的支持。不同操作系统上优先级并不相同,也不能很好地和java的10个优先级对应。例如:window2000就只提供了7个优先级。所以应该使用MAX_PRIORITY,MIN_PRIORITY,NORM_PRIORITY来设置优先级 。
Q3: JAVA多线程优先级如何运行。
书上说的的情况大多是在单核处理器上,但不完全对,那个线程会执行,完全取决于操作系统,
操作系统有自己的处理机制,Java会跟操作系统商量,优先级高的线程比优先级低的线程先执行的概率相对高一些,但不是绝对的,有时候优先级低的会先执行,完全取决于操作系统;
对于双核处理器,优先级高的线程比优先级低的线程先执行的概率逐渐减小,优先级高的线程和优先级低的线程都有可以先执行;
对于多核处理器,优先级高的线程和优先级低的线程哪个会先执行,真心不好说;另外多核处理器设置线程优先级没太多意义。
Q4: JAVA多线程优先级运行顺序的问题
这个。。你不必纠结。。
深入说的话java代码执行优先级,其实。。很深。。
首先说 线程优先级,并不能保证优先级高的先运行,也不保证优先级高的更多的分配CPU时间,只是对系统的建议而已,到底运行哪个,是操作系统决定的,都不是java说java代码执行优先级了算的。
另外java只能保证在线程内部看起来是顺序执行你的代码的,并不能保证从其他线程看来这个是按照你编码顺序执行的。。
java代码执行优先级的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java运算符、java代码执行优先级的信息别忘了在本站进行查找喔。







