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我们还可以验证其他线程仍在执行时主线程已终止。