java中开启异步任务

一般写在Controller里面
    
    @ResponseBody
    @RequestMapping("/logOutCaigou")
    public boolean logOutCaigou(ModelAndView mav, @Param("memberId")Long memberId, @Param("openId")String openId) {
        
        saveLoginLog(openId, memberId, LoginLog.LOGOUT); //存储登出日志
        return true;
    }

//开启异步记日志
启动异步线程。、,后台执行任务。任务开启后,就return直接返回
不需要等待任务执行完成
private void saveLoginLog(final String openId, final long memberId, int type) {
        
        ExecutorService exec = Executors.newSingleThreadExecutor(); //开启异步单例线程
        exec.execute(new Runnable() {
            public void run() {
                iLoginLogService.saveLoginLog(openId, memberId, LoginLog.LOGIN); //存储登录日志
            }
        });
        return;
    }

Service里面

@Override
    @TradingDataSource(name = DataSources.WRITE_WECHAT_DATASOURCE)
    public boolean saveLoginLog(String openId, long memberId, int type) throws ServiceException {
        
        LoginLog loginLog = new LoginLog();
        loginLog.setId(sequenceUtil.getSeqNextVal("seq_login_log"));
        loginLog.setOpenId(openId);
        loginLog.setMemberId(memberId);
        loginLog.setState(type);
        String key = CaigouConstant.CACHEKEY_ADDRESS_PREFIX + openId;
        cacheManagerDao.set(key, "北京北京"); //保存详细地址
        loginLog.setDeviceMessage(cacheManagerDao.get(key).toString());
        iLoginLogDao.saveLoginLog(loginLog);
        return true;
    }

时间: 2024-11-09 10:43:50

java中开启异步任务的相关文章

java 中的异步回调

异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图: 先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作,然而真正干活的是CallBackBody,它里面的execute才是真正要处理的事情,如果成功,则触发onSucess,否则触发onFailure. CallBackApp做为最终的运行舞台,这里面还得单独跑一个线程,来启动CallBackTask,这样才不会阻塞后面的处理. CallBackBo

java中的异步处理和Feature接口(一)

背景介绍想象这样一个场景:你可能希望为你的法国客户提供指定主题的热点报道.为实现这一功能,你需要向 谷歌或者Twitter的API请求所有语言中针对该主题最热门的评论,可能还需要依据你的内部算法 对它们的相关性进行排序.之后,你可能还需要使用谷歌的翻译服务把它们翻译成法语,甚至 利用谷歌地图服务定位出评论作者的位置信息,最终将所有这些信息聚集起来,呈现在你的网站上. 典型的“混聚”式应用 在这种“混聚”应用式的应用中,我们的应用可能会有以下两种需求: 由于我们调用的许多都是外部提供的接口,极有可

java中5种异步转同步方法

先来说一下对异步和同步的理解: 同步调用:调用方在调用过程中,持续等待返回结果. 异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数. 其实,两者的区别还是很明显的,这里也不再细说,我们主要来说一下Java如何将异步调用转为同步.换句话说,就是需要在异步调用过程中,持续阻塞至获得调用结果. 不卖关子,先列出五种方法,然后一一举例说明: 使用wait和notify方法,synchronized 使用条件锁ReentrantLock Future 使用Co

java中 synchronized 的使用,确保异步执行某一段代码。

最近看了个有关访问网络url和下载的例子,里面有几个synchronized的地方,系统学习下,以下内容很重要,记下来. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行.另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块. 二.然而,当一个线程访问object的一个synchroniz

多线程(三) java中线程的简单使用

============================================= 原文链接:多线程(三) java中线程的简单使用 转载请注明出处! ============================================= java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依旧是实现了Runnabel接口.考虑到java的

Java中的Filter详解 --基础篇

Filter是Servlet规范中的一个高级特性,和Servlet不同的是,他们不处理客户端请求,只用于对request,response进行修改: 如果要自己实现一个自定义的Filter必须实现javax.servlet.Filter接口,接口中有三个方法: package javax.servlet; import java.io.IOException; /** * A filter is an object that performs filtering tasks on either

为Spring MVC开启异步任务

为Spring MVC开启异步任务 配置自定义AsyncTaskExecutor package com.spider.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.web.servlet.config.an

Redis学习记录之Java中的初步使用

1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http://download.csdn.net/detail/he90227/8569855</span> Redis是什么?两句话可以做下概括: 1. 是一个完全开源免费的key-value内存数据库 2. 通常被认为是一个数据结构服务器,主要是因为其有着丰富的数据结构 strings.map. list.

Java中的事务——JDBC事务和JTA事务

本文来介绍一下J2EE中和事务相关的内容,在阅读本文之前,希望读者对分布式有一定的了解. Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现.所以本文暂不讨论容器事务.本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务. JDBC事务 JDBC事务,就是在Java中用来控制