//获取当前时间:毫秒
long a = System.currentTimeMillis();
System.out.println("a :" + a); try
{
//更改订单状态
shopService.updateOrder(order); //如果订单状态从 支付成功 改成 已发货,则给用户发送一条微信消息。
if (Integer.parseInt(stats) == 3){
    //异步发送微信消息
MessageImpl messageImpl = new MessageImpl(openId, tranNum, logisticcompany, logisticnum);
messageImpl.run();
//同步发送微信消息
    //message.sendWxMessage(openId, tranNum, logisticcompany,logisticnum);
} }
catch (Exception e)
{
e.printStackTrace();
} //计算 try 内语句的执行时间
long b = System.currentTimeMillis();
System.out.println("b :" + b);
System.out.println(" b - a :" + (b - a));

  

package com.starcloud.helpapp.wxMessage.service.impl;

import org.springframework.stereotype.Service;

import net.sf.json.JSONObject;

import com..helpapp.common.Loger;
import com..helpapp.common.utils.Tools;
import com..helpapp.wxMessage.ConnectionUrlUtil;
import com..helpapp.wxMessage.beans.MsgTemplateBean;
import com..helpapp.wxMessage.common.Constant;
import com..helpapp.wxMessage.service.Message; public class MessageImpl implements Runnable
{ /**
*
* [简要描述]:推送微信消息
* [详细描述]: 1:订单状态改成已发货
*
* @param parameter
*/
String openId;
String tranNum;
String logisticcompany;
String logisticnum; public void MessageImpl(String openId,String tranNum,String logisticcompany,String logisticnum)
{
this.openId = openId;
this.tranNum = tranNum;
this.logisticcompany = logisticcompany;
this.logisticnum = logisticnum; } public void sendWxMessage(String openId,String tranNum,String logisticcompany,String logisticnum)
{ ;
JSONObject parameters = new JSONObject();
MsgTemplateBean bean = MsgTemplateBean.getMsgTemplageBean(tranNum,logisticcompany,logisticnum);
bean.setTouser(openId);
parameters = JSONObject.fromObject(bean);
System.out.println("parameters: " + parameters.toString());
// else
// {
//
// MsgforDistributeBean bean = MsgforDistributeBean.getMsgTemplageBean(payfee,phoneNum,proName);
// bean.setTouser(openId);
// parameters = JSONObject.fromObject(bean);
// }
Loger.logtxt("WxMessage", "发送消息"+parameters);
String access_token = getAccess_token();
if(null != access_token)
{
String returnstr = ConnectionUrlUtil.sendPost(Constant.SEND_MESSAGEURL+"?access_token="+access_token,parameters.toString());
try
{
JSONObject returnJson = JSONObject.fromObject(returnstr); if(0 == returnJson.getInt("errcode"))
{
Loger.logtxt("WxMessage", "发送消息成功"+parameters);
}
else
{
Loger.logtxt("WxMessage", "发送消息失败"+parameters);
}
}
catch (Exception e)
{
e.printStackTrace();
} }
else
{
//发送失败,获取token失败
Loger.logtxt("WxMessage", "发送消息失败,原因获取access_token失败 ");
} }
/**
*
* [简要描述]:获取到access_token
* [详细描述]:
*
* @return
*/
public String getAccess_token()
{
String access_token = "";
String access_token_json = ConnectionUrlUtil.sendPost(Constant.TOKEN_URL, "grant_type=client_credential&appid=" + Constant.APP_ID + "&secret="
+ Constant.APP_SECRET);
if(Tools.isNotEmty(access_token_json))
{
JSONObject tokenJson = JSONObject.fromObject(access_token_json);
if(null != tokenJson && null!=tokenJson.get("access_token"))
{
//ACCESS_TOKEN
access_token = tokenJson.getString("access_token");
}
}
return access_token;
}
@override
public void run(){
sendWxMessage(openId,tranNum, logisticcompany, logisticnum);
}
}

  

增加线程异步发送消息的方法二(Runnable)的更多相关文章

  1. 增加线程异步发送消息的方法一(Thread)

    @RequestMapping(value="order/updateOrder.do") public String updateOrder(HttpServletRequest ...

  2. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)

    keyword:Android 使用handler实现线程间发送消息 (主线程 与 子线程之间).(子线程 与 子线程之间) 相信大家平时都有使用到异步线程往主线程(UI线程)发送消息的情况. 本文主 ...

  3. Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)

    Delphi实现获取句柄并发送消息的方法 本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil, ...

  4. kafka7 探索生产者同步or异步发送消息

    1.生产者:在发送完消息后,收到回执确认. 主要是在SimpleProducer.java中修改了发送消息的2行代码,用到了回调函数,修改如下: //发送消息 ProducerRecord<St ...

  5. ActiveMQ producer同步/异步发送消息

    http://activemq.apache.org/async-sends.html producer发送消息有同步和异步两种模式,可以通过代码配置: ((ActiveMQConnection)co ...

  6. C#实现在应用程序间发送消息的方法示例

    本文实例讲述了C#实现在应用程序间发送消息的方法.分享给大家供大家参考,具体如下: 首先建立两个C#应用程序项目. 第一个项目包含一个Windows Form(Form1),在Form1上有一个But ...

  7. Rocketmq异步发送消息

    package com.bfxy.rocketmq.quickstart; import java.util.List; import org.apache.rocketmq.client.excep ...

  8. 【转载】Delphi7从子线程中发送消息到主线程触发事件执行

    在对数据库的操作时,有时要用一个子线程来进行后台的数据操作.比如说数据备份,转档什么的.在主窗口还能同是进行其它操作.而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上 ...

  9. java 中Handler 和Runnable 的使用 异步发送消息 转

    public class MainActivity extends Activity { TextView text1, text2; Button button; Thread th; @Overr ...

随机推荐

  1. 现在创业做App,先做 Android 还是 iOS?

    随着互联网+的高速发展,现在创业大部分都是在布局移动端,初期往往摆在面前最大的难题是,如何分配有限的成本,在最快的速度内占领市场?这个大难题会影响创始人在团队和产品建设方方面面的决定.缩小至移动App ...

  2. [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)

    原文地址CodeProject 目录 介绍 “二进制-十进制”相互转换 十进制->二进制 二进制->十进制 OR运算符(按位或|) OR运算符工作方式 FlagsAttribute AND ...

  3. 企业IT管理员IE11升级指南【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  4. MySQL COLUMNS分区

    200 ? "200px" : this.width)!important;} --> 介绍 COLUMN分区是5.5开始引入的分区功能,只有RANGE COLUMN和LIS ...

  5. TODO:软件升级的那些事

    TODO:软件升级的那些事 软件升级,指软件从低版本向高版本的更新.由于高版本常常修复低版本的部分BUG,所以经历了软件升级,一般都会比原版本的性能更好,得到优化的效果,用户也能有更好的体验. 最近常 ...

  6. Atitit 查询优化器的流程attilax总结

    Atitit 查询优化器的流程attilax总结 1.1. 来理解该过程:1 1.2. 关于这些优化器的最重要原则的就是:尽可能的减少扫描范围,2 1.3. .筛选条件分析2 1.4. 二.索引优化2 ...

  7. Security3: Schema 和 Permission

    Schema是Object的容器,授予对Schema访问的权限,就是授予对Schema下所有object的访问权限. 一,Schema 是object的container The new schema ...

  8. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下FluentValidation验证组件.那里只是概述了一下,并没有对其使用和强大功能做深入研究 ...

  9. Android探索之BroadcastReceiver具体使用以及安全性探究

    前言: 最近的计划是学习一下iOS的NSNotificationCenter,突然想起来的Android的广播机制,所以还是觉得先对BroadcastReceiver来个全面的总结然后再去学习NSNo ...

  10. ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】

    到目前为止,我们定义的ServiceProvider已经实现了基本的服务提供和回收功能,但是依然漏掉了一些必需的细节特性.这些特性包括如何针对IServiceProvider接口提供一个Service ...