Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java线程错误_Java_Multithreading - Fatal编程技术网

Java线程错误

Java线程错误,java,multithreading,Java,Multithreading,对于给定的程序,您能否解释一下,因为我没有得到我期望的结果: 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

对于给定的程序,您能否解释一下,因为我没有得到我期望的结果:

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 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
开头,因为我先调用了它,两者占用相同的睡眠时间。

基本上你的参数是错误的。start()函数不启动踏板。它只是将其置于可运行状态

基本上你的论点是错误的。start()函数不启动踏板。它只是将其置于可运行状态

当您启动线程时,这是因为您有独立的任务,这些任务很少或没有相互依赖性。因此,您不应该期望两个线程之间有特定的执行顺序,事实上,大多数多线程错误都来自于这样的假设


如果您希望事情按特定顺序发生,请使用单个线程。如果您可以假定任务没有特定的顺序,那么只能使用多个线程。

当您启动线程时,这是因为您有独立的任务,这些任务几乎没有或没有相互依赖性。因此,您不应该期望两个线程之间有特定的执行顺序,事实上,大多数多线程错误都来自于这样的假设


如果您希望事情按特定顺序发生,请使用单个线程。如果可以假定任务没有特定的顺序,则只能使用多线程。

多线程序列的执行不能依赖优先级。
Java线程的基本规则是,它将依赖于JVM,并且不能保证每个线程的执行顺序。优先级可以影响但不能确保执行

多线程序列的执行不能依赖优先级。
Java线程的基本规则是,它将依赖于JVM,并且不能保证每个线程的执行顺序。优先级可以影响但不能确保执行

我的代码似乎符合我的假设::我的问题是为什么k.start()----在第一位以外的第二位打印我的结果,并且由于它在q.start()之前进入运行开始,线程有一个状态概念。调用start()时,它建议JVM将其置于可运行状态(而不是开始执行)。在一个时间点上,可能有许多线程处于可运行状态。JVM随机选取并启动该线程。@user709577 k.start()不会启动线程执行……它只会说线程已准备好执行。JVM可以在任何时候选择它来运行它我的代码似乎符合我的假设::我的问题是为什么k.start()------在第一个位置以外的第二个位置打印我的结果,并且由于它在q.start()之前进入运行开始,线程有一个状态概念。调用start()时,它建议JVM将其置于可运行状态(而不是开始执行)。在一个时间点上,可能有许多线程处于可运行状态。JVM随机选取并启动该线程。@user709577 k.start()不会启动线程执行……它只会说线程已准备好执行。JVM可以在任何时候选择它来运行它,如果我将第二个线程优先级设置为10呢??第一个线程q到7???会发生什么情况???@user709577它可能会打印正确的结果,但不能保证在多个运行时会发生相同的情况,如果我将第二个线程优先级设置为10??第一个线程q到7???会发生什么情况???@user709577它可能会打印正确的结果,但不能保证在多次运行时会出现相同的结果
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