Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - 使用示例调度线程



Java 是一种多线程编程语言,这意味着我们可以使用 Java 开发多线程程序。多线程程序包含两个或多个可以同时运行的部分,每个部分可以同时处理不同的任务,从而优化可用资源的使用,尤其是在您的计算机具有多个 CPU 的情况下。

根据定义,多任务处理是指多个进程共享 CPU 等公共处理资源。多线程将多任务处理的概念扩展到应用程序中,您可以在其中将单个应用程序内的特定操作细分为单独的线程。每个线程都可以并行运行。操作系统不仅在不同的应用程序之间分配处理时间,而且还在应用程序内的每个线程之间分配处理时间。

多线程使您能够以多种活动可以在同一程序中并发进行的方式编写程序。

Java 提供了一个java.util.concurrent.ScheduledExecutorService接口,它是 ExecutorService 接口的子接口,并支持任务/线程的未来和/或定期执行。以下是此接口的一些重要且有用的方法。

ScheduledExecutorService 方法

序号 方法和描述
1

<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)

创建并执行一个 ScheduledFuture,该 ScheduledFuture 在给定延迟后启用。

2

ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)

创建并执行一个一次性操作,该操作在给定延迟后启用。

3

ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

创建并执行一个周期性操作,该操作首先在给定的初始延迟后启用,然后以给定的周期启用;也就是说,执行将在 initialDelay 后开始,然后是 initialDelay+period,然后是 initialDelay + 2 * period,依此类推。

4

ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

创建并执行一个周期性操作,该操作首先在给定的初始延迟后启用,然后在一次执行终止与下一次执行开始之间以给定的延迟启用。

示例 1

以下 TestThread 程序展示了如何在基于线程的环境中使用 ScheduledExecutorService 接口来安排任务,以在 2 秒后以 2 秒的间隔在 10 秒的时间段内运行,展示了 scheduleAtFixedRate() 和 schedule() 方法的使用。

package com.tutorialspoint;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedRate(new BeepTask(), 2, 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

输出

beep
beep
beep
beep
beep

示例 2

以下 TestThread 程序展示了如何在基于线程的环境中使用 ScheduledExecutorService 接口,以调度任务在 2 秒后开始执行,并在 10 秒的时间段内每隔 2 秒执行一次,演示了 scheduleAtFixedDelay() 和 schedule() 方法的用法。

package com.tutorialspoint;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.scheduleAtFixedDelay(new BeepTask(), 2, 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

输出

beep
beep
beep
beep

示例 3

以下 TestThread 程序展示了如何在基于线程的环境中使用 ScheduledExecutorService 接口,以调度任务在 2 秒后执行一次,并在 10 秒的时间段内演示 schedule() 方法的用法。

package com.tutorialspoint;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class TestThread {

   public static void main(final String[] arguments) throws InterruptedException {
      final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final ScheduledFuture<?> beepHandler = 
         scheduler.schedule(new BeepTask(), 2, TimeUnit.SECONDS);

      scheduler.schedule(new Runnable() {

         @Override
         public void run() {
            beepHandler.cancel(true);
            scheduler.shutdown();			
         }
      }, 10, TimeUnit.SECONDS);
   }

   static class BeepTask implements Runnable {
      
      public void run() {
         System.out.println("beep");      
      }
   }
}

输出

beep
广告