Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设计并编写一个任务计划程序,它可以执行未同步或已同步的任务_Java_Task_Synchronized - Fatal编程技术网

Java 设计并编写一个任务计划程序,它可以执行未同步或已同步的任务

Java 设计并编写一个任务计划程序,它可以执行未同步或已同步的任务,java,task,synchronized,Java,Task,Synchronized,这是一个面试问题,这意味着这可以在短时间内完成。 我想在这里问一下,因为我不知道如果有人问我该怎么办 “设计并编写一个可以执行非同步或同步任务的任务计划程序” 请发挥您的想象力/假设,并分享您的想法和意见。我会使用Executor服务,因为它内置并完成大部分您想要的事情。它不在乎这些任务是否使用同步。这个问题故意含糊其辞,它是为了表明你在设计和解决问题方面有多么出色,你做了什么样的假设,你如何证明它们,等等。没有一个好的答案。这是一个解决问题的问题 我的看法是: 我的调度程序可以执行任意的Run

这是一个面试问题,这意味着这可以在短时间内完成。 我想在这里问一下,因为我不知道如果有人问我该怎么办

“设计并编写一个可以执行非同步或同步任务的任务计划程序”


请发挥您的想象力/假设,并分享您的想法和意见。

我会使用Executor服务,因为它内置并完成大部分您想要的事情。它不在乎这些任务是否使用同步。

这个问题故意含糊其辞,它是为了表明你在设计和解决问题方面有多么出色,你做了什么样的假设,你如何证明它们,等等。没有一个好的答案。这是一个解决问题的问题

我的看法是:

  • 我的调度程序可以执行任意的
    Runnable
    Callable
    ,我将实现它,因为它似乎是一个很好的问题抽象。我正在使用尽可能多的标准类,以使API可移植且易于使用

  • 通过非同步化和同步化,我理解:可以安全地并发运行,并且需要独占锁。即,不允许计划程序同时运行两个同步任务

  • 将使用marker接口区分同步和非同步任务。注释也很好,但在运行时很难提取

  • 我不会给出完整的实现,但它可能会将一些标准的
    ScheduledExecutorService
    封装为一个额外的同步,用于同步任务。我想
    ConcurrentMap
    就可以了。在运行标记为已同步的任务之前,我确保没有其他同一时间的已同步任务正在运行。我阻塞并等待或拒绝(这可以配置)


  • 那么,同步任务是什么意思?从CPU调度器的角度来看,问这样一个问题是没有意义的,因为这些是更高级别的同步原语(互斥、条件变量、障碍等)。这是在Google的采访中提出的,从技术上讲,任何调度器都可以处理这两个问题,这取决于编写任务的人来处理更高级别的原语(除非你需要实时或类似的东西)。在我看来,自从我与谷歌面谈以来,谷歌的面试问题变得越来越糟。@JesusRamos-我不同意。这个问题似乎(部分)是旨在了解您如何处理模糊和不明确的需求,并将技术上可行的需求与不可行的需求区分开来。这些都是开发人员从事前沿工作的重要技能。