gpt4 book ai didi

java - Web 应用程序中的 Spring 线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:00 28 4
gpt4 key购买 nike

我正在为 MMO 浏览器游戏编写服务器,我需要创建几个线程。他们将一直运行,并有一些 sleep 时间。像这样使用 spring 线程是个好主意吗?

@Component
@Scope("prototype")
public class PrintTask2 implements Runnable{

String name;

public void setName(String name){
this.name = name;
}

@Override
public void run() {

System.out.println(name + " is running");

try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println(name + " is running");

}

将任务执行器实现为 bean?

<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="WaitForTasksToCompleteOnShutdown" value="true" />
</bean>

此外,线程在也定义为 bean 的单例中启动。

我的方法有什么问题?

最佳答案

您可以使用 @Scheduled(fixedDelay = 5000) 定期执行方法。请记住为包含您的主要方法的类设置 @EnableScheduling

@Scheduled 注释有两个选项 - fixedDelayfixedRate

fixedDelay 将持续执行您的方法,在最后一次执行完成后延迟 X 毫秒。

fixedRate 将在固定日期连续执行您的方法。因此,无论最后一次执行是否完成,此方法都会每 X 毫秒执行一次。

如果你想同时处理一堆对象,你也可以使用@Async。再一次,您需要使用 main 方法将 @EnableAsync 添加到您的类中。

示例

//Remember to set @EnableScheduling
//in the class containing your main method
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class Application {

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class);
}
}

@Component
public class ScheduledTasks {

List<YourObject> myObjects;

//This method will run every 5 second.
@Scheduled(fixedDelay = 5000)
public void yourMethodName() {
//This will process all of your objects all at once using treads
for(YourObject yo : myObjects){
yo.process();
}
}
}

public class YourObject {

Integer someTest = 0;

@Async
public void process() {
someTest++;
}
}

奖金您可以通过扩展 AsyncConfigurerSupport 并覆盖 getAsyncExecutor 来摆脱池大小的 XML 配置。有关此方法的更多信息,请访问以下链接

我建议你看看:

https://spring.io/guides/gs/scheduling-tasks/

https://spring.io/guides/gs/async-method/

关于java - Web 应用程序中的 Spring 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43141731/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com