java线程优先级最低怎么设置_java-测试线程优先级.在某些情况下,低优先...

这篇博客探讨了线程优先级对执行速度的影响。作者在测试中发现,即使设置了不同的优先级,线程的速度表现仍然相似。文章解释了线程启动延迟和处理器资源分配对优先级影响的关系,并提供了一个示例代码,展示了如何通过控制线程启动和资源竞争来观察优先级效果。实验结果显示,在多线程和多核心处理器环境下,优先级的影响可能并不显著。

我正在尝试测试2个线程,一个线程具有较高的优先级,而另一个线程具有较低的优先级.

根据我的结果,有时低优先级线程速度更快,这怎么可能?

我已经通过增加每个线程内的click变量来测试了不同优先级的线程.

我也增加和减少了睡眠时间,但是什么也没有.

由于我是在后台不运行繁重程序的情况下进行测试的,因此我决定在运行高清影片的情况下进行测试,但仍然没有真正的变化,线程的速度始终相同.

我的电脑是Intel i5.我正在运行Windows 7 64位,16GB RAM

这是代码:

class clicker implements Runnable{

long click =0;

Thread t;

private volatile boolean running = true;

clicker(int p){

t=new Thread(this);

t.setPriority(p);

}

public void run(){

while(running)

click++;

}

public void stop(){

running = false;

}

public void start(){

t.start();

}

}

class HiLoPri {

public static void main(String args[]){

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

clicker hi=new clicker(Thread.NORM_PRIORITY+4);

clicker lo=new clicker(Thread.NORM_PRIORITY-4);

lo.start();

hi.start();

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

lo.stop();

hi.stop();

try {

hi.t.join();

lo.t.join();

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("LO: "+lo.click);

System.out.println("HI: "+hi.click);

}

}

最佳答案

你有两个问题.一个是线程需要一段时间才能启动,因此您可以通过顺序触发它们来给“低”一个不错的开始.另一个是线程优先级决定了在有处理器时间参数的情况下谁可以运行.有两个线程和8个有效的处理器内核,优先级并没有多大关系!这是一个固定的示例,该示例使用闩锁“同时”启动所有线程,并使用足够的线程实际争夺资源,您可以看到优先级设置的效果.它给出了相当一致的结果.

static class Clicker implements Runnable{

BigInteger click = BigInteger.ZERO;

Thread t;

Clicker(int p){

t=new Thread(this);

t.setPriority(p);

}

public void run(){

try {

latch.await();

} catch(InterruptedException ie) {}

while(running)

click = click.add(BigInteger.ONE);

}

public void start(){

t.start();

}

}

public static volatile boolean running = true;

public static final CountDownLatch latch = new CountDownLatch(1);

public static void main(String args[]){

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

List listLow = new ArrayList();

List listHigh = new ArrayList();

for (int i = 0; i < 16; i++) {

listHigh.add(new Clicker(Thread.NORM_PRIORITY+4));

}

for (int i = 0; i < 16; i++) {

listLow.add(new Clicker(Thread.NORM_PRIORITY-4));

}

for (Clicker clicker: listLow) {

clicker.start();

}

for (Clicker clicker: listHigh) {

clicker.start();

}

latch.countDown();

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

e.printStackTrace();

}

running = false;

BigInteger lowTotal = BigInteger.ZERO;

BigInteger highTotal = BigInteger.ZERO;

try {

for (Clicker clicker: listLow) {

clicker.t.join();

lowTotal = lowTotal.add(clicker.click);

}

for (Clicker clicker: listHigh) {

clicker.t.join();

highTotal = highTotal.add(clicker.click);

}

} catch (InterruptedException e) {

e.printStackTrace();

}

System.out.println("LO: "+lowTotal);

System.out.println("HI: "+highTotal);

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值