关于多线程的优先级,这个程序里面,现在计算机比较好,int存储不下了,我跑了好几次都是负分,特把int改成long。但是之后跑出来的结果,两个数字都差不多,不知道是什么问题?等待答案中。
这个原因并不是优先级失效了,而是因为你的处理器是多核的。这段代码在单核CPU上一定是先B1后B2的,但是现在处理器都是多核的,多核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 关键字来防止状态出现竞争。记住,一旦线程进入实例的同步方法,没有其
他线程可以进入相同实例的同步方法。然而,该实例的其他不同步方法却仍然可以被调用。