对于给定的程序,你能解释一下,因为我得不到我的预期:
package javaapplication14;
class Mythread implements Runnable{
String myname;
int myage;
public Mythread( String par_name, int par_age){
myname = par_name;
myage = par_age;
}
public void run(){
try{
for(int i=1; i<=myage; i++) {
System.out.println("Happy birthday "+myname);
Thread.sleep(2000);
}
}catch(Exception e){
System.out.println();
}
}
}
public class JavaApplication14 {
public static void main(String[] args) {
Mythread m = new Mythread("Mutinda ", 2);
Mythread p = new Mythread("Boniface", 2);
Thread k = new Thread(m);
Thread q = new Thread(p);
k.start();
q.start();
Thread t = new Thread(m);
try{
for( int i=1; i<=5; i++){
System.out.println("Main thread executing");
Thread.sleep(1000);
}
}catch(Exception e){
System.out.println("Thread interrupted");
}
}
}
这是我的输出:
Main thread executing
Happy birthday Boniface
Happy birthday Mutinda
Main thread executing
Main thread executing
Happy birthday Boniface
Happy birthday Mutinda
Main thread executing
Main thread executing
我期待这个:
Main thread executing
Happy birthday Mutinda
Happy birthday Boniface
Main thread executing
Main thread executing
Happy birthday Mutinda
Happy birthday Boniface
Main thread executing
Main thread executing
我需要有人向我解释为两个帖子k
和q
设置的优先级,以便q
的输出成为第一个而不是k
,无论睡眠时间如何。
我的论点:因为k.start()
在q.start()
之前被调用,所以我希望我的输出以k
开头,因为我先调用它,然后两者占用相同的休眠时间。 / p>
答案 0 :(得分:3)
基本上你的论点是错误的。 start()函数无法启动。它只是将其置于可运行状态。
答案 1 :(得分:3)
当你启动线程时,它是因为你有独立的任务,很少或没有相互依赖。因此,您不应期望两个线程之间的特定执行顺序,实际上大多数多线程错误来自于做出这样的假设。
如果您希望以特定顺序发生事情,请使用单个线程。如果你可以假设没有特定的任务顺序,那么只能使用多个线程。
答案 2 :(得分:0)
您不能依赖多线程序列执行的优先级。 Java Threading基本规则是它将依赖于JVM,并且不能保证每个线程的执行顺序。优先级可以影响但不能确保执行