给线程设置了高优先级仍然不能保证他被最先执行完,那么优先级到底有什么用处?例如:classCustomThreadextendsThread{CustomThread(Stringname){super(name);}publicsynchronizedvoi...
给线程设置了高优先级仍然不能保证他被最先执行完,那么优先级到底有什么用处?
例如:
class CustomThread extends Thread {
CustomThread(String name) {
super(name);
}
public synchronized void run() {
System.out.println(this.getName());
try {
sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("NAME: " + this.getName() + " Bye");
}
}
class MultiThread {
public static void main(String args[]) throws InterruptedException {
CustomThread thread1 = new CustomThread("first");
CustomThread thread2 = new CustomThread("second");
CustomThread thread3 = new CustomThread("third");
CustomThread thread4 = new CustomThread("fourth");
thread1.setPriority(Thread.MAX_PRIORITY);
thread2.setPriority(Thread.MAX_PRIORITY-1);
thread3.setPriority(Thread.MAX_PRIORITY-2);
thread4.setPriority(Thread.MAX_PRIORITY-3);
thread1.start();
thread2.start();
thread3.start();
thread4.start();
}
}
结果是:
first
second
third
fourth
NAME: second Bye
NAME: first Bye
NAME: third Bye
NAME: fourth Bye
前面是按照优先级顺序来的,可是后面sleep之后怎么控制顺序?
henterji 我明白你的意思,但我关心的是优先级别高的线程却不一定会先完成,这个问题如何解决?谢谢
另外,上面程序的运行结果前面部分总是会按照first,second,third,fourth的顺序显示,而sleep之后就会随机排序了,优先级此时就不起作用了,有没有解决的办法?
展开