如何理解Java主线程?详细指南

2021年3月18日16:37:53 发表评论 736 次浏览

Java为多线程编程提供了内置支持。多线程程序包含两个或多个可以同时运行的部分。这种程序的每个部分都称为一个线程, 并且每个线程都定义了单独的执行路径。

主线程

当Java程序启动时, 一个线程立即开始运行。这通常称为主要程序的线程, 因为它是程序开始时执行的线程。

特性:

  • 它是从中产生其他"子"线程的线程。
  • 通常, 它必须是完成执行的最后一个线程, 因为它执行各种关闭操作

流程图 :

Java中的主线程

如何控制主线程

启动我们的程序时自动创建主线程。为了控制它, 我们必须获得对其的引用。这可以通过调用方法来完成currentThread()在Thread类中存在。此方法返回对其调用的线程的引用。 Main线程的默认优先级为5, 所有其余用户线程的优先级将从父级继承到子级。

// Java program to control the Main Thread
public class Test extends Thread
{
     public static void main(String[] args)
     {
         // getting reference to Main thread
         Thread t = Thread.currentThread();
          
         // getting name of Main thread
         System.out.println( "Current thread: " + t.getName());
          
         // changing the name of Main thread
         t.setName( "Geeks" );
         System.out.println( "After name change: " + t.getName());
          
         // getting priority of Main thread
         System.out.println( "Main thread priority: " + t.getPriority());
          
         // setting priority of Main thread to MAX(10)
         t.setPriority(MAX_PRIORITY);
          
         System.out.println( "Main thread new priority: " + t.getPriority());
          
          
         for ( int i = 0 ; i < 5 ; i++)
         {
             System.out.println( "Main thread" );
         }
          
         // Main thread creating a child thread
         ChildThread ct = new ChildThread();
          
         // getting priority of child thread
         // which will be inherited from Main thread
         // as it is created by Main thread
         System.out.println( "Child thread priority: " + ct.getPriority());
          
         // setting priority of Main thread to MIN(1)
         ct.setPriority(MIN_PRIORITY);
          
         System.out.println( "Child thread new priority: " + ct.getPriority());
          
         // starting child thread
         ct.start();
     }
}
  
// Child Thread class
class ChildThread extends Thread
{
     @Override
     public void run() 
     {
         for ( int i = 0 ; i < 5 ; i++)
         {
             System.out.println( "Child thread" );
         }
     }
}

输出如下:

Current thread: main
After name change: Geeks
Main thread priority: 5
Main thread new priority: 10
Main thread
Main thread
Main thread
Main thread
Main thread
Child thread priority: 10
Child thread new priority: 1
Child thread
Child thread
Child thread
Child thread
Child thread

Java中main()方法和主线程之间的关系

对于每个程序, 将通过以下方式创建一个主线程虚拟机(Java虚拟机)。 " Main"线程首先验证main()方法的存在, 然后初始化该类。请注意, 从JDK 6开始, main()方法在独立的Java应用程序中是必需的。

使用主线程(仅单线程)进行死锁

我们可以仅使用Main线程即仅使用单个线程来创建死锁。以下Java程序演示了这一点。

// Java program to demonstrate deadlock
// using Main thread
public class Test 
{
     public static void main(String[] args)
     {
         try
         {
              
             System.out.println( "Entering into Deadlock" );
              
             Thread.currentThread().join();
              
             // the following statement will never execute
             System.out.println( "This statement will never execute" );
              
         } 
          
         catch (InterruptedException e) 
         {
             e.printStackTrace();
         }
     }
}

输出如下:

Entering into Deadlock

说明:

语句" Thread.currentThread()。join()"将告诉主线程等待该线程死亡(即等待自身)。因此, 主线程等待自身死亡, 这只是一个死锁。

相关文章: Java中的守护程序线程.

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: