这个问题在这里已有答案:
我一直在研究线程 . 我发现普通优先级是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线程之间的核心关系是什么?
3 回答
请参阅...系统中将有一个或多个处理器...现在,无论何时运行java程序,每个程序都有自己的JVM实例 . 每当程序尝试执行某些操作时,底层JVM就会生成调用操作系统来实现它.JVM本身无法完成某些任务,只是将这些调用转发给操作系统.JVM无法控制所有内容......
说完这个,回到你的问题,你已经分别将线程优先级设置为5和10 .. JVM“不执行线程” . 线程由调度程序(OS)进行处理,然后执行 . JVM可以直接向操作系统说这个线程的优先级很高,但最终还是由操作系统决定应给予线程多少优先级 . 对于操作系统,JVM只是另一个需要资源的过程 .
提高优先级只会有所帮助
您的CPU利用率接近100%,操作系统计划需要选择运行哪个线程 . 这些天有很多免费的CPU,这是不太可能的
并且您拥有root或管理员特权 .
你真的不在乎它是否一直有效 .
这种组合使它们变得毫无用处,只不过是一个通常被忽略的提示 . 我会把它视为一个注释,当你转储线程堆栈时它是可见的 .
大多数情况下,使用不如CPU的繁忙线程是更好的解决方案 .
在许多情况下,像这样,JVM只是将参数传递给操作系统,让它完成它的工作 . JVM唯一能做的就是在转储线程时打印优先级 .
那是因为
如果您的更高优先级线程处于睡眠模式,那么任何其他线程都有机会执行它
删除此块并首先检查“Bob Job” .