JAVA面试题:群发消息

//----------面试题目如下-------------------------------------------------------
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();
    }

}

 

 

文章来源:http://www.qiqia.com/ms/java/qunfa.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值