1、使用Runnable
接口
import org.springframework.stereotype.Service;
@Service
public class MyService {
public void executeAsyncTask() {
Runnable task = () -> {
// 在这里编写你的任务代码
System.out.println("Running in a new thread: " + Thread.currentThread().getName());
// 模拟耗时操作
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task finished");
};
Thread thread = new Thread(task);
thread.start(); // 启动新线程
}
}
public class MyRunnableTask implements Runnable {
@Override
public void run() {
// 在这里编写你的任务代码
System.out.println("Running in a new thread: " + Thread.currentThread().getName());
// 模拟耗时操作
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task finished");
}
}
import org.springframework.stereotype.Service;
@Service
public class MyService {
public void executeAsyncTask() {
MyRunnableTask task = new MyRunnableTask();
Thread thread = new Thread(task);
thread.start(); // 启动新线程
}
}
2、使用ExecutorService
1. 配置ExecutorService Bean
在您的配置类中创建一个ExecutorService的Bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Configuration
public class AppConfig {
@Bean
public ExecutorService executorService() {
// 创建一个固定大小的线程池
return Executors.newFixedThreadPool(10);
}
}
2. 创建一个任务类
创建一个实现了Runnable接口的任务类:
public class MyRunnableTask implements Runnable {
@Override
public void run() {
// 任务代码
System.out.println("Running in a new thread: " + Thread.currentThread().getName());
// 模拟耗时操作
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 设置中断标志
System.out.println("Task was interrupted");
}
System.out.println("Task finished");
}
}
3. 在服务组件中提交任务
在服务组件中,注入ExecutorService并提交任务:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.concurrent.ExecutorService;
@Service
public class MyService {
private final ExecutorService executorService;
@Autowired
public MyService(ExecutorService executorService) {
this.executorService = executorService;
}
public void executeAsyncTask() {
MyRunnableTask task = new MyRunnableTask();
executorService.submit(task); // 提交任务给线程池执行
}
}
3、使用Async
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class MyAsyncService {
@Async
public void asyncMethod() {
// 执行异步操作
System.out.println("Execute method asynchronously. "
+ Thread.currentThread().getName());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Async method execution completed.");
}
}