并发编程:Java中的线程池和定时任务示例

原创 末蓝、 2024-09-18 15:18 122阅读 0赞

在Java中,线程池和定时任务是两种常见的并发处理方式。下面将分别介绍这两种方法的使用示例。

  1. 线程池(ThreadPoolExecutor)

线程池提供了一种管理和重复利用多线程的方式。以下是一个简单的创建并使用线程池的例子:

  1. import java.util.concurrent.*;
  2. public class ThreadPoolExample {
  3. public static void main(String[] args) {
  4. // 创建一个固定大小的线程池
  5. ExecutorService executor = Executors.newFixedThreadPool(5);
  6. // 提交任务到线程池,会根据线程池当前可用的线程数量来执行
  7. for (int i = 0; i < 10; i++) {
  8. executor.submit(new Task(i, "Task-" + i))));
  9. }
  10. // 关闭线程池,不再接受新的任务
  11. executor.shutdown();
  12. // 确保所有任务已完成
  13. while (!executor.isTerminated())) {
  14. try {
  15. Thread.sleep(500);
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. System.out.println("All tasks completed.");
  21. }
  22. static class Task implements Runnable {
  23. private int id;
  24. private String name;
  25. public Task(int id, String name) {
  26. this.id = id;
  27. this.name = name;
  28. }
  29. @Override
  30. public void run() {
  31. System.out.println("Task-" + id + " started by thread: " + Thread.currentThread().getName());
  32. try {
  33. Thread.sleep(2000); // 模拟耗时操作
  34. } catch (InterruptedException e) {
  35. e.printStackTrace();
  36. }
  37. System.out.println("Task-" + id + " completed by thread: " + Thread.currentThread().getName());
  38. }
  39. }
  40. }
  1. 定时任务(ScheduledExecutorService)

Java提供了一个名为java.util.concurrent.ScheduledExecutorService的类,它是一个基于定时/周期性执行任务的线程池。

以下是一个创建并使用定时任务的例子:

  1. import java.util.concurrent.Executors;
  2. import java.util.concurrent.ScheduledExecutorService;
  3. import java.util.concurrent.TimeUnit;
  4. public class ScheduledTaskExample {
  5. public static void main(String[] args) {
  6. // 创建一个定时任务执行器
  7. ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
  8. // 定义一个要执行的定时任务,每5秒执行一次
  9. scheduler.scheduleAtFixedRate(new MyTask(), 0, 5, TimeUnit.SECONDS);
  10. // 关闭定时任务执行器,不再接受新的任务
  11. scheduler.shutdown();
  12. System.out.println("Scheduled task executor is running.");
  13. }
  14. static class MyTask implements Runnable {
  15. @Override
  16. public void run() {
  17. System.out.println("My task executed at: " + new Date());
  18. }
  19. }
  20. }

以上两种示例都展示了如何在Java中使用线程池和定时任务进行并发编程。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读