怎么样用并发、多线程设置多个闹钟

想实现手机闹钟,多个闹钟提醒时间,会依次按时间响,有人跟我说用多线程,并发什么的,麻烦您们,帮帮我

这个和“并发、多线程”完全不挨着。人家张口一说,你也信了?

最简单还是使用多进程

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7795014
  • 这篇博客也不错, 你可以看下程序员朋友们,假如你跟我有相同遭遇你会怎么做
  • 除此之外, 这篇博客: 快速从入门到精通,建议细读中的 六、多线程知识梳理 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 多线程知识梳理(1) - 并发编程的艺术笔记
    多线程知识梳理(2) - synchronized 三部曲之基本使用
    多线程知识梳理(3) - synchronized 三部曲之锁优化
    多线程知识梳理(4) - synchronized 三部曲之等待/通知模型
    多线程知识梳理(5) - 线程池四部曲之 Executor 框架
    多线程知识梳理(6) - 线程池四部曲之 ThreadPoolExecutor
    多线程知识梳理(7) - ConcurrentHashMap 实现原理
    多线程知识梳理(8) - volatile 关键字
    多线程知识梳理(9) - ThreadLocal
    多线程知识梳理(10) - 死锁的概念
    多线程知识梳理(11) - 队列同步器实现原理 & 应用
    多线程知识梳理(12) - ReentrantLock 解析
    多线程知识梳理(13) - ReentrantReadWriteLock 原理

    《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

    优秀开源项目:

    • ali1024.coding.net/public/P7/Android/git
    • github.com/android
  • 以下回答由chatgpt基于相关博客总结生成:

    我可以提供以下解决方案:

    利用并发和多线程来实现多个手机闹钟的功能可以通过以下步骤实现:

    1. 设置闹钟时间:通过获取用户设定的闹钟时间,保存在一个数组或队列中,以便按顺序触发多个闹钟。

    2. 开启多线程进行闹钟触发:通过多线程的方式,开启一个计时器来不断检查当前时间是否与设定的闹钟时间相同,如果相同就触发闹钟。

    3. 触发闹钟的方式:可以通过调用系统的闹钟服务AlarmManager来触发闹钟。具体可以使用PendingIntent来定义要触发的操作,然后将其设置为AlarmManager的一个闹钟,以实现触发闹钟的功能。

    下面是示例代码:

    //定义闹钟执行任务
    public class AlarmTask implements Runnable{
        private Context context;
        private AlarmManager alarmMgr;
    
        public AlarmTask(Context context){
            this.context = context;
            this.alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        }
    
        @Override
        public void run(){
            //获取用户设定的闹钟时间,并保存在一个队列中
            List<Calendar> alarmTimes = getAlarmTimes();
    
            //按顺序触发多个闹钟
            while(!alarmTimes.isEmpty()){
                Calendar alarmTime = alarmTimes.get(0);
                long currentTime = System.currentTimeMillis();
    
                //如果当前时间等于设定的闹钟时间,就触发该闹钟
                if(currentTime >= alarmTime.getTimeInMillis()){
                    //定义要触发的操作
                    Intent intent = new Intent(context, AlarmReceiver.class);
                    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
    
                    //设置闹钟
                    alarmMgr.set(AlarmManager.RTC_WAKEUP, alarmTime.getTimeInMillis(), alarmIntent);
    
                    //从队列中删除该闹钟时间
                    alarmTimes.remove(alarmTime);
                }else{
                    //等待一段时间后再检查
                    try{
                        Thread.sleep(alarmTime.getTimeInMillis() - currentTime);
                    }catch(InterruptedException e){
                        Log.d(TAG, "sleep failure");
                    }
                }
            }
        }
    
        //获取用户设定的闹钟时间
        private List<Calendar> getAlarmTimes(){
            //TODO: 从用户设定的数据中获取闹钟时间列表
            List<Calendar> alarmTimes = new ArrayList<>();
            alarmTimes.add(Calendar.getInstance());
            alarmTimes.add(Calendar.getInstance());
            alarmTimes.add(Calendar.getInstance());
            return alarmTimes;
        }
    }
    
    //定义闹钟接收器
    public class AlarmReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent){
            // TODO: 实现闹钟触发后的操作,比如弹出提醒对话框或播放响铃等
        }
    }
    
    //启动闹钟任务
    public void startAlarmTask(){
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(new AlarmTask(context));
        executor.shutdown();
    }