首页 文章

正常Vs上的线程最大优先级[重复]

提问于
浏览
1

这个问题在这里已有答案:

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

  • 1

    请参阅...系统中将有一个或多个处理器...现在,无论何时运行java程序,每个程序都有自己的JVM实例 . 每当程序尝试执行某些操作时,底层JVM就会生成调用操作系统来实现它.JVM本身无法完成某些任务,只是将这些调用转发给操作系统.JVM无法控制所有内容......

    说完这个,回到你的问题,你已经分别将线程优先级设置为5和10 .. JVM“不执行线程” . 线程由调度程序(OS)进行处理,然后执行 . JVM可以直接向操作系统说这个线程的优先级很高,但最终还是由操作系统决定应给予线程多少优先级 . 对于操作系统,JVM只是另一个需要资源的过程 .

  • 1

    提高优先级只会有所帮助

    • 您的CPU利用率接近100%,操作系统计划需要选择运行哪个线程 . 这些天有很多免费的CPU,这是不太可能的

    • 并且您拥有root或管理员特权 .

    • 你真的不在乎它是否一直有效 .

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

    大多数情况下,使用不如CPU的繁忙线程是更好的解决方案 .

    我对JVM行为有点困惑

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

  • 1

    那是因为

    Thread.sleep(1000);
    

    如果您的更高优先级线程处于睡眠模式,那么任何其他线程都有机会执行它

    删除此块并首先检查“Bob Job” .

相关问题