//----------面试题目如下------------------------------------------------------- package cn.qpyl.sms; /** *对会员消息进行消息群发。 * 1.所有会员必须依次发送,会员编号1-100 。 * 2.当遇到发送失败,结束任务。 * 3.结束任务以后主线程退出。 */ public class Main { // public static void main(String[] args) { } } //----------模拟类库代码如下,以下代码为实现上面功能所需的依赖,无需修改代码------------------------------------------------------- package cn.qpyl.sms; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.function.Consumer; /** * 实现用户列表获取,以及消息发送的异步接口 * 本类为库文件,禁止对其进行修改。 */ public class QunFa { //限制调用次数 private static int m_userGetCount=0; // public class User { private int m_userId=0; private String m_userName=""; // public int getUserId() { return m_userId; } // public String getUserName() { return m_userName; } } // public class Status { public static final int STATUS_SUCCESS=0; public static final int STATUS_ERROR=1; // private int m_status=STATUS_SUCCESS; private Object m_data=null; // public int getStatus() { return m_status; } // public Object getData() { return m_data; } } /** * 获取用户列表,使用异步返回,并且第二次调用不会返回任何数据。 * @param callback */ public void getUserList(Consumer<List<User>> callback) { new Thread(()->{ // try { Random rd=new Random(); Thread.sleep(rd.nextInt(100)+10); } catch (Exception ex) { // } // List<User> list=new ArrayList<>(125); synchronized (QunFa.class) { if(m_userGetCount<1) { for(int i=0;i<100;i++) { User user = new User(); user.m_userId=i+1; user.m_userName="Nike"+(i+1); list.add(user); } } m_userGetCount++; } // callback.accept(list); }).start(); } /** * 实现消息异步发送 * @param user 需要给那个用户发送消息 * @param callback 成功或者失败都会回调。 */ public void SendMessage(User user,Consumer<Status> callback) { new Thread(()->{ System.out.println("用户:"+user.m_userId+" 发送消息"); // try { Thread.sleep(50); } catch (Exception ex) { // } // Status sta=new Status(); if(user.m_userId==98) { sta.m_status=Status.STATUS_ERROR; } callback.accept(sta); }).start(); } }