正常Vs上的线程最大优先级

时间:2013-12-30 07:50:55

标签: java multithreading

我一直在研究线程。我发现普通优先级是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 个答案:

答案 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利用率接近100%,操作系统计划需要选择运行哪个线程。这些天有很多免费的CPU,这不太可能
  • 您拥有root权限或管理员权限。
  • 你真的不在乎它是否一直有效。

这种组合使它们变得毫无用处,只不过是一个通常被忽略的提示。我会把它当作转储线程堆栈时可见的注释。

大多数情况下,使用比CPU更少繁忙的线程是更好的解决方案。

  

我对JVM行为有点困惑

在许多情况下,像这样,JVM只是将参数传递给操作系统,让它完成它的工作。 JVM唯一能做的就是在转储线程时打印优先级。