我正在尝试编写一个简单的 Spring Boot 程序并练习 @Async。我想teacher异步获取实体的所有记录。
我的数据库访问对象:
public interface TeacherService {
List<Teacher> findAll(Pageable pageable);
}
Run Code Online (Sandbox Code Playgroud)
它是如何实现的:
public class TeacherServiceImpl implements TeacherService{
@Autowired
private TeacherRepository repository;
@Override
public List<Teacher> findAll(Pageable pageable) {
Page<Teacher> page = repository.findAll(pageable);
return page.get().collect(Collectors.toList());
}
}
Run Code Online (Sandbox Code Playgroud)
我的异步方法:
@Component
public class PrintAllTeacherDataBaseResult {
@Autowired
TeacherService teacher;
@Async
public AsyncResult<List<Teacher>> printPage(Pageable page){
return new AsyncResult<>(teacher.findAll(page));
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用printPage没有@Async注释的方法时,它工作正常。但是当我使用它时会抛出以下异常:
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:807) [spring-boot-2.4.2.jar:2.4.2]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:788) [spring-boot-2.4.2.jar:2.4.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:333) [spring-boot-2.4.2.jar:2.4.2]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) …Run Code Online (Sandbox Code Playgroud) 我正在观看有关火花内存管理的演示文稿。
他谈到了他们如何在一个执行器中实现不同任务之间的公平性(12:00)。他提出了任务之间动态分配的想法,并宣称如果更多任务开始执行,Spark 会将其他任务的页面溢出到磁盘。
我之前读过 Spark 中的任务本质上是线程,而在 Java 中,我们没有这种能力来管理线程的内存并在它们之间建立内存公平性。我想知道 Spark 是如何实现这一目标的?
我正在阅读《Effective Java Edition 3》。在第 2 章第 14 页中,作者讨论了构建器模式并呈现了以下代码:
public abstract class Pizza {
public enum Topping { HAM, MUSHROOM, ONION, PEPPER, SAUSAGE }
final Set<Topping> toppings;
abstract static class Builder<T extends Builder<T>> {
EnumSet<Topping> toppings = EnumSet.noneOf(Topping.class);
public T addTopping(Topping topping) {
toppings.add(Objects.requireNonNull(topping));
return self();
}
abstract Pizza build();
// Subclasses must override this method to return "this"
protected abstract T self();
}
Pizza(Builder<?> builder) {
toppings = builder.toppings.clone(); // See Item 50
}
}
Run Code Online (Sandbox Code Playgroud)
上述抽象类的实现:
public class …Run Code Online (Sandbox Code Playgroud)