gpt4 book ai didi

java - 输出与线程优先级程序不一致

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:54 26 4
gpt4 key购买 nike

下面的程序应该表明具有更高优先级的线程将占用更多的 CPU 时间。该代码与 Herbert Schildt(印度版)在 The Complete Reference: Java(第七版)中编写的代码非常相似 - 第 237 和 238 页。

class clicker implements Runnable
{
long click=0;
Thread t;
private volatile boolean running=true;

public clicker(int p)
{
t=new Thread(this,"yo yo");
t.setPriority(p);
}

public void run()
{
while(running)
{click++;}
}
public void stop()
{
running = false;
}

public void start()
{
t.start();
}
}
public class ThreadPriorities {

public static void main(String[] args) {
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
clicker hi=new clicker(Thread.NORM_PRIORITY+2);
clicker lo=new clicker(Thread.NORM_PRIORITY-2);

lo.start();
hi.start();

try{Thread.sleep(10000);}catch(Exception e){}

lo.stop();
hi.stop();
try{
hi.t.join();
lo.t.join();
}catch(Exception e){}

System.out.println("Low priority thread : "+lo.click);
System.out.println("High priority thread : "+hi.click);
System.out.println(lo.click<hi.click?true:false);
}

}

一个输出:

低优先级线程:708527884;高优先级线程:697458303;假的

另一个输出:

低优先级线程:676775494;高优先级线程:687116831;是的

这可能是什么原因?我有一台 Macbook Air,内存为 4GB。也许这可能是相关的?请告诉我这些不一致输出的原因。提前致谢。

最佳答案

您的两个线程不会相互竞争,因此它们的优先级无关紧要。另一方面,低优先级线程在您创建高优先级线程时正在运行,因此它可能会运行更长时间。

the thread having higher priority will take up more of the CPU's time

更高的优先级使事情运行得更快或运行得更多是一种常见的误解。这两个线程不会相互竞争,因此如果它们竞争,谁获胜没有区别。优先级不会让事情进展得更快,它只会让他们优先考虑这样的事情。

输出不一致的原因可能是一个线程运行而另一个线程不运行的时间量在很大程度上取决于系统当时正在做什么。

关于java - 输出与线程优先级程序不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44852768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com