Java多线程处理意外结果
我正在学习Java中的多线程技术,不过在下面的代码中测量两个线程的相对CPU使用率hi和loJava多线程处理意外结果,java,multithreading,Java,Multithreading,我正在学习Java中的多线程技术,不过在下面的代码中测量两个线程的相对CPU使用率hi和lo class Clicker implements Runnable{ long click=0; Thread t; private volatile boolean running =true; public Clicker(int p) { t=new Thread(this); t.setPriority(p); } public void run(){ while(ru
class Clicker implements Runnable{
long click=0;
Thread t;
private volatile boolean running =true;
public 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();
}
}
public class HiLoPri {
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(InterruptedException e){
System.out.println("Main Thread interrupted. ");
}
lo.stop();
hi.stop();
try{
hi.t.join();
lo.t.join();
}catch(InterruptedException e){
System.out.println("Interrupted Exception Caught");
}
System.out.println("Low priority : " + lo.click);
System.out.println("High priority : " + hi.click);
}
}
以下是各种优先级的输出:
(规范:Java SE 7、AMD A10四核2.3GHz和Window 8)Java规范不保证在为线程分配配额时考虑优先级 每个线程都有优先级。当存在加工竞争时 资源中,具有较高优先级的线程通常在 优先选择优先级较低的线程。这种偏好不是,, 但是,保证最高优先级的线程始终是 无法使用运行和线程优先级来可靠地实现 相互排斥
线程优先级只是对操作系统的一个提示。如果这个提示有任何作用的话,它将帮助操作系统在需要运行的线程多于逻辑CPU时决定应该运行哪些线程。如果您有足够的空闲CPU,即使是优先级最低的线程也可以随心所欲地运行
注意:要在Windows上提高线程的优先级,您需要是管理员,在Unix上您需要是root。这是多线程,优先级不决定输出的任何内容。它增加了可能性,但不能保证这一点。只有在CPU时间出现争用时,优先级才会真正发挥作用。在四核系统上,在系统试图同时执行4个CPU限制的任务之前,这还不是一个重要的因素。你能解释一下你预期会发生什么以及为什么吗?你确定每次这样做都会得到这个结果吗?