### Question:
CarreraProducer implements ProducerInterface { @Override public Result sendBatchConcurrently(List<Message> messages) { return producer.sendBatchConcurrently(messages); } CarreraProducer(CarreraConfig config); static CarreraProducer newCarreraProducer(CarreraConfig config); MessageBuilder messageBuilder(); AddDelayMessageBuilder addDelayMessageBuilder(); CancelDelayMessageBuilder cancelDelayMessageBuilder(); AddTxMonitorMessageBuilder addTxMonitorMessageBuilder(AddDelayMessageBuilder addDelayMessageBuilder); CancelTxMonitorMessageBuilder cancelTxMonitorMessageBuilder(CancelDelayMessageBuilder cancelDelayMessageBuilder); TxBusinessMessageBuilder txBusinessMessageBuilder(MessageBuilder messageBuilder); @Override void start(); @Override void shutdown(); @Override Result sendMessage(Message message); @Override Result send(String topic, byte[] body); @Override Result send(String topic, String body); @Override Result sendByCharset(String topic, String body, String charsetName); @Override Result send(String topic, String body, String key, String... tags); @Override Result send(String topic, byte[] body, String key, String... tags); @Override Result sendByCharset(String topic, String body, String charsetName, String key, String... tags); @Override Result sendWithHashId(String topic, long hashId, String body, String key, String... tags); @Override Result sendWithHashId(String topic, long hashId, byte[] body, String key, String... tags); @Override Result sendWithHashIdByCharset(String topic, long hashId, String body, String charsetName, String key, String[] tags); @Override Result sendWithPartition(String topic, int partitionId, long hashId, byte[] body, String key, String... tags); @Override Result sendWithPartition(String topic, int partitionId, long hashId, String body, String key, String... tags); @Override Result sendWithPartitionByCharset(String topic, int partitionId, long hashId, String body, String charsetName, String key, String[] tags); @Override Result sendBatchConcurrently(List<Message> messages); @Override Result sendBatchOrderly(List<Message> messages); @Override DelayResult sendDelay(String topic, byte[] body, DelayMeta delayMeta); @Override DelayResult sendDelay(String topic, String body, DelayMeta delayMeta); @Override DelayResult sendDelayByCharset(String topic, String body, DelayMeta delayMeta, String charsetName); @Override DelayResult sendDelay(String topic, String body, DelayMeta delayMeta, String... tags); @Override DelayResult sendDelay(String topic, byte[] body, DelayMeta delayMeta, String... tags); @Override DelayResult sendDelayByCharset(String topic, String body, DelayMeta delayMeta, String charsetName, String... tags); @Override DelayResult cancelDelay(String topic, String uniqDelayMsgId); @Override DelayResult cancelDelay(String topic, String uniqDelayMsgId, String... tags); @Override Result sendBatchSync(List<Message> messages); static Message buildMessage(String topic, int partitionId, long hashId, String body, String key, String... tags); static Message buildMessageByCharset(String topic, int partitionId, long hashId, String body, String charsetName, String key, String... tags); static Message buildMessage(String topic, int partitionId, long hashId, byte[] body, String key, String... tags); CarreraConfig getConfig();  }### Answer:
@Test public void sendBatchMessagesConcurrently() throws Exception { List<Message> msgs = mockMessageList(100); long start = TimeUtils.getCurTime(); Result result = producer.sendBatchConcurrently(msgs); System.out.println(result); System.out.println("concurrently:" + TimeUtils.getElapseTime(start)); Assert.assertTrue(result.getCode() == CarreraReturnCode.OK); }