springboot 长轮询实现

springboot 长轮询实现springboot长轮询实现基于@EnableAsync , @Sync@SpringBootApplication@EnableAsyncpublicclassDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DemoApplication.cla…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

springboot 长轮询实现

基于 @EnableAsync , @Sync

@SpringBootApplication
@EnableAsync
public class DemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}
@RequestMapping("/async")
@RestController
public class AsyncRequestDemo {

    @Autowired
    private AsyncRequestService asyncRequestService;

    @GetMapping("/value")
    public String getValue() {

        String msg =  null;
        Future<String> result = null;
        try{
            result = asyncRequestService.getValue();
            msg = result.get(10, TimeUnit.SECONDS);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (result != null){
                result.cancel(true);
            }
        }

        return msg;
    }

    @PostMapping("/value")
    public void postValue(String msg) {
        asyncRequestService.postValue(msg);
    }
}

@Service
public class AsyncRequestService {

    private String msg = null;

    @Async
    public Future<String> getValue() throws InterruptedException {

        while (true){
            synchronized (this){
                if (msg != null){
                    String resultMsg = msg;
                    msg = null;
                    return new AsyncResult(resultMsg);
                }
            }
            Thread.sleep(100);
        }
    }

    public synchronized void postValue(String msg) {
        this.msg = msg;
    }
}

备注

  1. @EnableAsync 开启异步
  2. @Sync 标记异步方法
  3. Future 用于接收异步返回值
  4. result.get(10, TimeUnit.SECONDS); 阻塞,超时获取结果
  5. Future.cancel() 中断线程
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181940.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 敏捷大拇指帅哥美女大型派对 [北京][免费]

    敏捷大拇指帅哥美女大型派对 [北京][免费]

  • 三极管饱和的判断「建议收藏」

    三极管饱和的判断「建议收藏」三极管是电流放大器件,决定三极管是否饱和取决于Ib和Ic的相对大小,通常来讲Ic/Ib>hfe时,三极管饱和。因此导出以下结论:1.如何判断饱和?判断饱和时应该求出基级最大饱和电流IBS,然后再根据实际的电路求出当前的基级电流,如果当前的基级电流大于基级最大饱和电流,则可判断电路此时处于饱和状态。2.饱和的条件:1.集电极和

  • 接口测试抓包工具_接口测试请求头里面有哪些内容

    接口测试抓包工具_接口测试请求头里面有哪些内容1、Poster    Poster为Firefox浏览器的一个插件,主要用来模拟发并HTTP请求。随着Chrome浏览器的流行,它也出了chrome版本:ChromePoster  在Fiefox浏览器中的安装非常简单。首先,打开Fiefox浏览器,菜单栏“工具”–> “添加组件”,搜索“poster”,在搜索例表中点击“安装”,然后重启浏览器即可。  打开方法:菜

  • Executors和ThreadPoolExecutor学习整理

    任务的执行与线程池(上) https://mp.weixin.qq.com/s/p3JZERyZXnF8jR_3KKIGJA 任务的执行与线程池(下) https://mp.weixin.qq.com/s/iUAaVXIB8rCzP_GeDhIlqAjava并发编程–Executor 框架 https://www.cnblogs.com/MOBIN/p/5436482.html线程…

  • intellijidea激活码2021【2021最新】

    (intellijidea激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • ModelAndView 配置与使用「建议收藏」

    ModelAndView 配置与使用「建议收藏」一,ModelAndView介绍:1)ModelAndView用于后台与前端页面交互;2)可以用于重定向与转发到指定页面,3)可以保存数据然后渲染到页面二,使用:1)在Controlle

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号