关于多线程的优先级,这个程序里面,现在计算机比较好,int存储不下了,我跑了好几次都是负分,特把int改成long。但是之后跑出来的结果,两个数字都差不多,不知道是什么问题?等待答案中。

这个原因并不是优先级失效了,而是因为你的处理器是多核的。
这段代码在单核CPU上一定是先B1B2的,但是现在处理器都是多核的,多核CPU是可以真正实现多个线程同时运行的,而不是简单的快速切换的假象,每个核心都能够负责一个线程。

// Demonstrate thread priorities.

class clicker implements Runnable {

//int click = 0;

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();

}

}

class HiLoPri {

public static void main(String args[]) {

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

clicker hi = newclicker(Thread.NORM_PRIORITY + 2);

clicker lo = newclicker(Thread.NORM_PRIORITY - 2);

lo.start();

hi.start();

try {

hi.t.join();

       lo.t.join();

       }catch(InterruptedException e) {

       System.out.println("InterruptedException caught");

       }

       System.out.println("Low-priority thread: "+ lo.click);

       System.out.println("High-priority thread: " + hi.click);

       }



}

//


任何时候在多线程情况下,你有一个方法或多个方法操纵对象的内部状态,都必须用synchronized 关键字来防止状态出现竞争。记住,一旦线程进入实例的同步方法,没有其

他线程可以进入相同实例的同步方法。然而,该实例的其他不同步方法却仍然可以被调用。