我一直在研究线程。我发现普通优先级是5。但我只想将优先级设置为十。
以正常优先级和最大优先级运行的作业改变了含义,即使我为我的线程指定了优先级。它只是正常运行和最大混合情况。
如果有关于JVM Vs OS的任何内容,请完整解释。
为什么会这样?我对JVM行为有点困惑。一些深刻的解释会让我清楚。代码如下!
class Count implements Runnable { public void run() { for(int i=1;i<=100;i++) { if(i%10==1) { System.out.println("10 counts have been finished"); } System.out.println("The numbers are:"+i+"From"+Thread.currentThread().getName()); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println(e); } } } } public class ThreadEx { public static void main(String[] args) { Count c = new Count(); Thread t = new Thread(c); Thread t1 = new Thread(c); t.setName("Sridhar Job"); t.start(); t1.setName("Bob Job"); t1.setPriority(10); t1.start(); } }
我读作Threads工作的所有内容都无法保证。 JVM线程和OS线程之间的核心关系是什么?
答案 0 :(得分:1)
这是因为
Thread.sleep(1000);
如果你的高优先级线程处于睡眠模式,那么任何其他线程都有机会执行它
删除此块并首先检查“Bob Job”完成。
答案 1 :(得分:1)
请参阅...系统中将有一个或多个处理器...现在,无论何时运行java程序,每个程序都有自己的JVM实例。每当程序尝试执行某些操作时,底层JVM调用操作系统实现它.JVM本身无法完成某些任务,只是将这些调用转发给操作系统.JVM无法控制所有内容......
说完这个,回到你的问题,你已经分别将线程优先级设置为5和10 .. JVM&#34;不执行线程&#34;。线程由调度程序(OS)进行调整,然后执行。 JVM可以直接向操作系统说这个线程的优先级很高,但最终它留给操作系统来决定应该给线程多少优先级。对于操作系统,JVM只是另一个需要资源的过程..
答案 2 :(得分:1)
提高优先级仅在
时有用这种组合使它们变得毫无用处,只不过是一个通常被忽略的提示。我会把它当作转储线程堆栈时可见的注释。
大多数情况下,使用比CPU更少繁忙的线程是更好的解决方案。
我对JVM行为有点困惑
在许多情况下,像这样,JVM只是将参数传递给操作系统,让它完成它的工作。 JVM唯一能做的就是在转储线程时打印优先级。