Groovy 怎么启动一个线程?

文章导读
Previous Quiz Next 启动线程 一旦创建了 Thread 对象,就可以调用 start() 方法来启动它,该方法会执行对 run() 方法的调用。以下是 start() 方法的简单语法 −
📋 目录
  1. 启动线程
  2. 语法 - 启动线程
  3. 示例 - 通过实现 Runnable 接口启动线程
  4. 示例 - 通过继承 Thread 类启动线程
  5. 示例 - 启动线程(演示 sleep() 方法)
A A

Groovy - 启动线程



Previous
Quiz
Next

启动线程

一旦创建了 Thread 对象,就可以调用 start() 方法来启动它,该方法会执行对 run() 方法的调用。以下是 start() 方法的简单语法 −

void start();

语法 - 启动线程

以下是启动线程的语法 −

thread_obj.start();

在这里,thread_objThread class 的对象,start()Thread class 的方法。

示例 - 通过实现 Runnable 接口启动线程

在这个示例中,我们通过实现 Runnable 接口创建了一个 RunnableDemo class。该 class 实现了 run() 方法。在主类 TestThread 中,我们创建了 RunnableDemo 对象,并使用这些对象创建了两个 Thread 对象。当对每个 thread 对象调用 Thread.start() 方法时,线程开始处理,程序开始执行。

Example.groovy

class Example {
   static void main(String[] args) {
	  RunnableDemo runnableDemo1 = new RunnableDemo( "Thread-1");
	  RunnableDemo runnableDemo2 = new RunnableDemo( "Thread-2");	  
	  Thread thread1 = new Thread(runnableDemo1);
	  Thread thread2 = new Thread(runnableDemo2);
	  thread1.start();
	  thread2.start();
   }
}
class RunnableDemo implements Runnable {
   private String threadName;
   RunnableDemo( String name) {
      threadName = name;
      println("Thread: " + threadName + ", " + "State: New");
   }
   void run() {
      println("Thread: " + threadName + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + threadName + ", " + i);         
      }
      println("Thread: " + threadName + ", " + "State: Dead");
   }
}

输出

上述程序产生以下输出 −

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

示例 - 通过继承 Thread 类启动线程

以下是将前述程序重写为继承 Thread 的版本 − 在这个示例中,我们创建了一个继承 Thread class 的 ThreadDemo class。在 constructor() 方法中调用 super(name) 来为线程分配名称,并调用 super.start() 来启动线程处理。

Example.groovy

class Example {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	  ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	  thread1.start();
	  thread2.start();
   }
}
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      println("Thread: " + name + ", " + "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: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-1, State: Running
Thread: Thread-2, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-1, State: Dead
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

示例 - 启动线程(演示 sleep() 方法)

在这个示例中,我们创建了几个继承自 Thread class 的 ThreadDemo class 的对象。我们在 constructor() 方法中调用 super(name) 来为 thread 分配名称,并调用 super.start() 来启动 thread 处理。使用 sleep() 方法,我们在处理过程中引入了延迟。

Example.groovy

class TestThread {
   static void main(String[] args) {
	  ThreadDemo thread1 = new ThreadDemo( "Thread-1");
	  ThreadDemo thread2 = new ThreadDemo( "Thread-2");
	  thread1.start();
	  thread2.start();
   }
}
class ThreadDemo extends Thread {
   ThreadDemo( String name) {
	  super(name);
      println("Thread: " + name + ", " + "State: New");
   }
   void run() {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
         println("Thread: " + Thread.currentThread().getName() + ", " + i); 
         try {
			Thread.sleep(50);
		} catch (InterruptedException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
      }
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
   }
   public void start () {
      println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
   }
}

输出

上述程序会产生以下输出 −

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