开发者社区 > 云原生 > 消息队列 > 正文

消息队列,java SDK,怎么没有异步发送的方法?

producer.sendAsync

展开
收起
charles_chao 2016-09-19 14:08:05 2349 0
1 条回答
写回答
取消 提交回答
  • 在整个思路上要调整一下 1、会有很多线程给一个队列上添加任务 2、有一个或者多个线程逐个执行队列的任务  考虑一下几点: 1、没有任务时,队列执行线程处于等待状态 2、添加任务时,激活队列执行线程,全部run起来,首先抢到任务的执行,其他全部wait  给个小例子吧 package org;import java.util.LinkedList;import java.util.List;public class Queues { public static List<Task> queue = new LinkedList<Task>(); /**  * 假如 参数o 为任务  * @param o  */ public static void add (Task t){ synchronized (Queues.queue) { Queues.queue.add(t); //添加任务 Queues.queue.notifyAll();//激活该队列对应的执行线程,全部Run起来 } } static class Task{ public void test(){ System.out.println("我被执行了"); } }} package org;import java.util.List;public class Exec implements Runnable{ @Override public void run() { while(true){ synchronized (Queues.queue) { while(Queues.queue.isEmpty()){ // try { Queues.queue.wait(); //队列为空时,使线程处于等待状态 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("wait..."); } Queues.Task t= Queues.queue.remove(0); //得到第一个 t.test(); //执行该任务 System.out.println("end"); } } } public static void main(String[] args) { Exec e = new Exec(); for (int i = 0; i < 2; i++) { new Thread(e).start(); //开始执行时,队列为空,处于等待状态 } //上面开启两个线程执行队列中的任务,那就是先到先得了 //添加一个任务测试 Queues.Task t =new Queues.Task(); Queues.add(t); //执行该方法,激活所有对应队列,那两个线程就会开始执行啦 } }  上面的就是很简单的例子了
    

    来源于网络,供您参考

    2019-10-10 17:52:36
    赞同 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

  • 云消息队列 Kafka 版
  • 消息服务
  • 云消息队列 MQ
  • 热门讨论

    热门文章

    相关电子书

    更多
    企业互联网架构之消息队列 立即下载
    基于消息队列RocketMQ的大型分布式应用上云最佳实践 立即下载
    云原生消息队列Apache RocketMQ 立即下载