Java Main线程

时间:2020-01-09 10:35:05  来源:igfitidea点击:

Java是最早提供对多线程的内置支持的编程语言之一。实际上,当Java程序启动时,一个线程立即开始运行,该线程在Java中被称为主线程。

如果我们尝试运行带有编译错误的Java程序,我们将看到提到主线程。这是一个简单的Java程序,尝试调用不存在的getValue()方法。

public class TestThread {	
  public static void main(String[] args) {
    TestThread t = new TestThread();
    t.getValue();
  }
}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
  The method getValue() is undefined for the type TestThread

正如我们在执行程序的错误中看到的那样,主线程开始运行,并且遇到了编译问题。

Java主线程

Java中的主线程很重要,因为Java程序将开始在此线程上运行。程序中产生的其他线程将从主线程继承某些属性,例如线程优先级,将线程创建为非守护程序线程,因为主线程是非守护程序线程。

默认情况下,主线程的名称为" main",主线程的线程优先级为5. 该主线程属于称为main的线程组。

Java虚拟机将继续执行线程,直到所有不是守护程序线程的线程都死亡为止。如果我们在程序中生成了其他非守护程序线程,则主线程可能会在这些线程之前终止。让我们看一个Java示例来阐明这些声明。

主线程Java示例

在程序中,我们将在main方法中显示线程的名称,并使用isAlive()方法验证线程是否仍处于活动状态或者已终止。

为了继续检查主线程的状态,还产生了另外三个线程,该主线程的引用发送给实现Runnable的类。

class NumThread implements Runnable{
  Thread thread;
  public NumThread(Thread thread) {
    this.thread = thread;
  }
  @Override
  public void run() {
    for (int i = 0; i < 5; i++) {
      System.out.println(Thread.currentThread().getName() + " : " + i);
    } 
    System.out.println("Thread name " + thread.getName());
    System.out.println("Main Thread Status " + thread.isAlive());
  }
}

public class ThreadPriority {
  public static void main(String[] args) {
    // Information about main thread
    System.out.println("Thread name- " + Thread.currentThread().getName());
    System.out.println("Priority of " + Thread.currentThread().getName() + " thread is " + Thread.currentThread().getPriority());
    System.out.println("Group " + Thread.currentThread().getName() + " thread belongs to- " + Thread.currentThread().getThreadGroup());
    // Creating threads
    Thread t1 = new Thread(new NumThread(Thread.currentThread()), "Thread-1");
    Thread t2 = new Thread(new NumThread(Thread.currentThread()), "Thread-2");
    Thread t3 = new Thread(new NumThread(Thread.currentThread()), "Thread-3");
    t1.start();
    t2.start(); 
    t3.start();
    System.out.println("Thread name " + Thread.currentThread().getName());
    System.out.println("Thread name " + Thread.currentThread().isAlive());
  }
}

输出:

Thread name- main
Priority of main thread is 5
Group main thread belongs to- java.lang.ThreadGroup[name=main,maxpri=10]
Thread name main
Thread name true
Thread-1 : 0
Thread-1 : 1
Thread-1 : 2
Thread-1 : 3
Thread-1 : 4
Thread name main
Main Thread Status false
Thread-3 : 0
Thread-3 : 1
Thread-3 : 2
Thread-3 : 3
Thread-3 : 4
Thread name main
Main Thread Status false
Thread-2 : 0
Thread-2 : 1
Thread-2 : 2
Thread-2 : 3
Thread-2 : 4
Thread name main
Main Thread Status false

从主线程的输出优先级可以看到,线程组也是主线程。 main我们还可以验证其他线程仍在执行时主线程已终止。