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_Runnable - Fatal编程技术网

Java 具有线程类和可运行接口的输出

Java 具有线程类和可运行接口的输出,java,multithreading,runnable,Java,Multithreading,Runnable,这两个程序都使用相同的逻辑实现,即在一个程序中,通过扩展thread类创建线程,另一个通过实现Runnable接口创建线程 这里的输出类似于“打印一些值,直到我按ENTER或RETURN键”,我的问题是,当我运行这两个程序时,“通过扩展线程类创建线程的程序将停止扩展线程类打印值,直到我按ENTER/RETURN键”我们说两者都在使用可运行接口输出创建线程的程序正在停止” 在这里,这两个程序的逻辑是相同的,唯一的区别是一个程序扩展线程类和实现可运行接口不同 通过延长螺纹 import java.i

这两个程序都使用相同的逻辑实现,即在一个程序中,通过扩展thread类创建线程,另一个通过实现Runnable接口创建线程

这里的输出类似于“打印一些值,直到我按ENTER或RETURN键”,我的问题是,当我运行这两个程序时,“通过扩展线程类创建线程的程序将停止扩展线程类打印值,直到我按ENTER/RETURN键”我们说两者都在使用可运行接口输出创建线程的程序正在停止”

在这里,这两个程序的逻辑是相同的,唯一的区别是一个程序扩展线程类和实现可运行接口不同

通过延长螺纹

import java.io.IOException;  

    class TryThread extends Thread {  
      public TryThread(String firstName, String secondName, long delay) {  
        this.firstName = firstName;  
        this.secondName = secondName;  
        aWhile = delay;  
        setDaemon(true);  
      }  
      public void run() {  
        try {  
          while (true) {  
            System.out.print(firstName);  
            Thread.sleep(aWhile);  
            System.out.print(secondName + "\n");  
          }  
        } catch (InterruptedException e) {  
          System.out.println(firstName + secondName + e);  
        }  
      }  
      private String firstName;  
      private String secondName;  
      private long aWhile;  
    }  
    public class Lab1 {  
      public static void main(String[] args) {  
        Thread first = new TryThread("A ", "a  ", 200L);  
        Thread second = new TryThread("B ", "b ", 300L);  
        Thread third = new TryThread("C ", "c ", 500L);  
        System.out.println("Press Enter when you have had enough...\n");  
        first.start();  
        second.start();  
        third.start();  
        try {  
          System.in.read();  
          System.out.println("Enter pressed...\n");  
        } catch (IOException e) {  
          System.out.println(e);  
        }  
        return;  
      }  
    }
输出:

Press Enter when you have had enough...  

    A B C a    
    A b   
    B a    
    A c   
    C a    
    A b   
    B a    
    A b   
    B c   
    C a    
    A a    
    A b   
    B a    
    A c   
    C b   
    B a    
    A   
    Enter pressed...  
通过实现可运行接口

import java.io.IOException;  

class TryThread1 implements Runnable {  
  public TryThread1(String firstName, String secondName, long delay) {  
    this.firstName = firstName;  
    this.secondName = secondName;  
    aWhile = delay;  
  }  
  public void run() {  
    try {  
      while (true) {  
        System.out.print(firstName);  
        Thread.sleep(aWhile);  
        System.out.print(secondName + "\n");  
      }  
    } catch (InterruptedException e) {  
      System.out.println(firstName + secondName + e);  
    }  
      }  
  private String firstName;  

  private String secondName;  
  private long aWhile;  
}  
public class Lab2 {  
  public static void main(String[] args) {  
    Thread first = new Thread(new TryThread1("A ", "a ", 200L));  
    Thread second = new Thread(new TryThread1("B ", "b ", 300L));  
    Thread third = new Thread(new TryThread1("C ", "c ", 500L));  
    System.out.println("Press Enter when you have had enough...\n");  
    first.start();  
    second.start();  
    third.start();  
    try {  
      System.in.read();  
      System.out.println("Enter pressed...\n");  
    } catch (IOException e) {  
      System.out.println(e);  
    }  
    return;  

  }  
}  
输出

Press Enter when you have had enough...  

A B C a   
A b   
B a   
A c   
C a   
A b   
B a   
A b   
B c   
C a   
A a   
A b   
B a   
A c   
C b   
B a   
A a   
A b   
B c   
C a   
A   
Enter pressed...  

b   
B a   
A a   
A b   
B c   
C a   
A b   
B a   
A c   
C a   
A b   
B a   
A b   
B a   
A c   
C a   
A b   
B a   
A c   
C b   
B a   
A a   
A b   
请告诉我扩展线程和实现可运行接口的区别。
他们中的大多数人更喜欢实现可运行接口。但是从这个输出差异来看,我不知道应该选择哪一个。这个差异似乎是特定于您的代码的。您调用setDaemon(true)--当扩展
线程时
而不是在实现
可运行时
。JavaDoc说:当运行的线程都是守护进程线程时,Java虚拟机退出