Groovy 主线程怎么操作?

文章导读
Previous Quiz Next 主线程 每当我们运行一个 Groovy 程序时,主线程会自动创建。这个线程负责执行 Groovy 程序。Groovy 运行时会搜索 main 方法来执行,并基于它创建一个主线程。如果我们创建多个线程,那么所有子线程都会从主线程派生。这个主
📋 目录
  1. 主线程
  2. 如何控制主线程?
  3. 示例 - 打印 Groovy 主线程
  4. 示例 - 展示线程状态
  5. 示例 - 检查子线程
A A

Groovy - 主线程



Previous
Quiz
Next

主线程

每当我们运行一个 Groovy 程序时,主线程会自动创建。这个线程负责执行 Groovy 程序。Groovy 运行时会搜索 main 方法来执行,并基于它创建一个主线程。如果我们创建多个线程,那么所有子线程都会从主线程派生。这个主线程是第一个创建的线程,通常也是最后一个线程,它用于执行关闭任务。

如何控制主线程?

主线程是由 JVM 在程序启动时自动创建的。但你可以使用不同的 Thread 方法和技术来控制主线程。

以下是一些控制主线程的方法。

  • sleep() 方法

  • join() 方法

  • interrupt() 方法

示例 - 打印 Groovy 主线程

在这个示例中,我们展示了一个简单的单线程程序,没有声明任何线程,并在程序执行中检查线程名称。

Example.groovy

class Example {
   void printName() {
	   println("Thread Name: " + Thread.currentThread().getName());
	   println("Thread Priority: " +Thread.currentThread().getPriority());
   }	
   static void main(String[] args) {
	   Example thread = new Example();
	   thread.printName();	   
   }
}

输出

上述程序产生以下输出 −

Thread Name: main
Thread Priority: 5

示例 - 展示线程状态

在这个示例中,我们创建了一个 ThreadDemo 类,它扩展了 Thread 类。我们没有向 Thread 传递任何名称,它将打印系统分配给线程的默认名称。在 main 方法中,我们创建了两个线程。在输出中,你可以检查,当前线程名称打印为 main,而线程是通过 constructor() 方法调用创建的。

Example.groovy

class Example {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
   }
}
class ThreadDemo extends Thread {
   ThreadDemo( ) {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: New");
   }
   void run() {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + Thread.currentThread().getName() + ", " + i); 
      }
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   void start () {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

输出

上述程序产生以下输出 −

Thread: main, State: New
Thread: main, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-0, State: Running
Thread: Thread-0, 4
Thread: Thread-0, 3
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-0, 2
Thread: Thread-1, 3
Thread: Thread-0, 1
Thread: Thread-1, 2
Thread: Thread-0, State: Dead
Thread: Thread-1, 1
Thread: Thread-1, State: Dead

示例 - 检查子线程

在这个示例中,我们创建了一个继承自 Thread class 的 ThreadDemo class。我们没有向 Thread 传递任何名称,它将打印系统分配给线程的默认名称。在 main 方法中,我们创建了两个线程。在输出中,你可以检查,当前线程名称打印为 main,而线程是通过 constructor() 方法调用创建的。在 main 方法的末尾,我们打印了 main thread 的状态。

Example.groovy

class TestThread {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo();
	  ThreadDemo thread2 = new ThreadDemo();
	  thread1.start();
	  thread2.start();
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
}
class ThreadDemo extends Thread {
   ThreadDemo( ) {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: New");
   }
   void run() {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + Thread.currentThread().getName() + ", " + i); 
      }
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   void start () {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

输出

上述程序产生以下输出 −

Thread: main, State: New
Thread: main, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-0, State: Running
Thread: main, State: Dead
Thread: Thread-1, State: Running
Thread: Thread-0, 4
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-0, 3
Thread: Thread-0, 2
Thread: Thread-0, 1
Thread: Thread-0, State: Dead

在这个输出中,你可以检查到 main thread 在早期阶段就已结束,但线程仍在运行并完成了它们的执行。