并发编程:Java中的线程池和定时任务示例
在Java中,线程池和定时任务是两种常见的并发处理方式。下面将分别介绍这两种方法的使用示例。
- 线程池(ThreadPoolExecutor)
线程池提供了一种管理和重复利用多线程的方式。以下是一个简单的创建并使用线程池的例子:
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 提交任务到线程池,会根据线程池当前可用的线程数量来执行
for (int i = 0; i < 10; i++) {
executor.submit(new Task(i, "Task-" + i))));
}
// 关闭线程池,不再接受新的任务
executor.shutdown();
// 确保所有任务已完成
while (!executor.isTerminated())) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("All tasks completed.");
}
static class Task implements Runnable {
private int id;
private String name;
public Task(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public void run() {
System.out.println("Task-" + id + " started by thread: " + Thread.currentThread().getName());
try {
Thread.sleep(2000); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task-" + id + " completed by thread: " + Thread.currentThread().getName());
}
}
}
- 定时任务(ScheduledExecutorService)
Java提供了一个名为java.util.concurrent.ScheduledExecutorService
的类,它是一个基于定时/周期性执行任务的线程池。
以下是一个创建并使用定时任务的例子:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class ScheduledTaskExample {
public static void main(String[] args) {
// 创建一个定时任务执行器
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
// 定义一个要执行的定时任务,每5秒执行一次
scheduler.scheduleAtFixedRate(new MyTask(), 0, 5, TimeUnit.SECONDS);
// 关闭定时任务执行器,不再接受新的任务
scheduler.shutdown();
System.out.println("Scheduled task executor is running.");
}
static class MyTask implements Runnable {
@Override
public void run() {
System.out.println("My task executed at: " + new Date());
}
}
}
以上两种示例都展示了如何在Java中使用线程池和定时任务进行并发编程。
还没有评论,来说两句吧...