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
Java使线程同时启动_Java_Multithreading - Fatal编程技术网

Java使线程同时启动

Java使线程同时启动,java,multithreading,Java,Multithreading,我这里有一个代码,当它运行时,它创建并启动一个每秒打印一个单词的新线程,5秒后,main方法停止线程。所以这个程序将打印5个单词,它确实打印了……但不是在我的家庭电脑上,而是在我的笔记本电脑上。在我家的电脑上打印6次,为什么 public class Main { public static void main (String [] args){ try { T1 t1 = new T1(); System.out.println("Creating and

我这里有一个代码,当它运行时,它创建并启动一个每秒打印一个单词的新线程,5秒后,main方法停止线程。所以这个程序将打印5个单词,它确实打印了……但不是在我的家庭电脑上,而是在我的笔记本电脑上。在我家的电脑上打印6次,为什么

public class Main {
  public static void main (String [] args){
    try {
      T1 t1 = new T1();
      System.out.println("Creating and staring thread 1\n");
      Thread.sleep(5000);
      t1.stopThread();
    } catch(InterruptedException ie) {}
  }
}

public class T1 extends Thread{

  private boolean alive = true;

  public T1(){
    start();
  }

  public void run(){
    while(alive){
      try {
        System.out.println("Tråd T1: Tråd 1");
        Thread.sleep(1000);
      } catch(InterruptedException ie) {}
    }
  }
  public void stopThread(){
    alive = false;
  }
}

两个结果都是正确的。睡眠时间是大约的。

幸运的是,您的程序根本停止打印。您有一个具有未定义行为的程序,它可以在某些机器上永远运行。您必须使
处于活动状态
易失性
,否则无法保证您的次线程将在主线程中看到对
处于活动状态的更改

看看Java语言规范的结尾;他们基本上给出了你的例子,认为这是不应该做的


也就是说,由于
线程的不准确,你可能仍然会得到6行而不是5行。sleep

看看这些,以便更好地理解-