F29OC作业22020-21第2学期1简介这是一个使用外部监视器生成作业调度系统的单独项目。它占学生F29OC分数的18%。2抄袭代码将通过GitLab代码抄袭检查运行。两个或更多学生之间共享的代码将被视为剽窃。与公共领域代码相同的代码(F29OC实验室示例中包含的代码除外)将被视为抄袭。涉嫌剽窃的学生将接受标准的大学剽窃报告和评估程序。请参阅https://www.hw.ac.uk/students...3项目开发和GitLab记录当您在CW2上工作时,我们要求您执行多次提交并将(带有有意义的提交消息)推送到您的远程存储库。这些应该在您更新项目的日子执行(包括JobDispatcher类本身和相关测试)。这样做的主要目的是提供证据证明代码是逐步开发的并且是学生自己的作品。因此,提交消息必须对外部读者有意义,这样他们才能跟随您的类和测试的增量开发。此外,对代码本身的更改也必须显示增量开发的证据并备份提交消息。因此,如果在GitLab提交的项目远程存储库中没有足够的增量开发证据,学生可能会被要求面试。学生需要:a)具备项目中开发或使用的所有代码的工作知识,b)能够解释项目的整体开发,以及c)能够提供增量开发的详细证据和解释他们的代码(这必须使用项目的提交历史)。显然无法证明上述情况的学生将在作业2中打分设置为零。4编程任务及评分(共18分)要求编写一个JobDispatcher类,并使用自己的测试代码进行测试。4.1GitLab文件CW2的GitLab存根为您提供了3个文件:JobDispatcher.java:这是您开发解决方案的地方。它必须实现下面的接口并提供本规范中描述的功能。Dispatcher.java:这提供了您的类必须实现的接口。它包含三个方法,其功能在此文件中指定。Tests.java:这包含一个非常简单的JUnit测试示例。您将在这里开发自己的测试,以确保您的类按照此规范执行。未能提供证据证明您已在此处增量开发测试意味着您的项目将不会被标记。4.2功能需求4.2.1概述?你的JobDispatcher必须管理一组Worker线程并释放它们em用于一组指定的作业。?它应该使用外部监视器来实现。?有两种类型的工作线程:计算线程和存储线程。?计算和存储线程将通过分别调用您的JobDispatcher的.queueComputeThread()和queueStorageThread()方法通知您的JobDispatcher类它们可用于作业。?您将阻塞工作线程,直到有足够的线程来执行指定的作业。一旦正确的线程组合可用于作业,JobDipatcher将停止阻塞线程(作业所需)并允许它们继续进行。?作业将通过您的.specifyJob(nComputeThreads,nStorageThreads)方法指定给您的班级。4.2.2UR1-一个作业需要四个计算线程(4分)JobDispatcher类的实例必须能够接受.specifyJob(4,0)指定的单个作业,然后能够处理计算和存储线程他们自己通过分别调用您的.queueComputeThread()和queueStorageThread()方法,它可用于此作业。4.2.3UR2-多个作业(4分)您的JobDispatcher类的实例必须能够接受通过重复调用.specifyJob指定的多个作业,然后能够处理计算和存储线程,使它们自己可用于这些作业,通过分别调用您的.queueComputeThread()和queueStorageThread()方法。4.2.4UR3-多个作业(4分)除了对方法.specifyJob、.queueComputeThread()和queueStorageThread()的调用可以以任何顺序发生外,与UR2一样。4.2.5UR4–FILO顺序(4分)除了工作线程必须按FILO(先进后出)顺序选择外,与UR3相同。例如,如果初始化后:i.Compute线程C1调用,并被.queueComputeThread()阻塞,则ii.Compute线程C2调用,并被.queueComputeThread()阻塞,然后iii.Compute线程C3调用,是bl由.queueComputeThread()锁定。上面是对.specifyJob(2,0)的调用,然后线程C2和C3将被释放以继续执行它们,但线程C1将保持阻塞状态。4.3打标软件会运行四次4.3.1要求打标你的代码会被自动打标软件编译打标。该软件将应用于您的项目四次,您将收到每个要求的四次运行的平均值。(请注意,在过去,此类测试运行不一致,因为学生的代码不是线程安全的)。4.3.2执行的一致性(额外2分)此外,如果UR的测试始终如一地运行并在该UR可用的4分中获得2.0分或更高分,则UR1-4中的每一项都将获得0.5分。4.4约束要求注意:未能满足以下指定的任何约束要求将导致您的项目获得z标记色情。4.4.1外部监视器类您必须使用以下类:importjava.util.concurrent.locks.Condition;导入java.util.concurrent.locks.ReentrantLock;JobDispatcher.java中不应使用其他“线程安全”类。特别是关键字synchronization,并且不应使用包java.util.concurrent中的任何类。4.4.2JavaSE1.8您的代码必须使用JavaSE1.8编译。4.4.3测试请注意,学生无法使用评分软件。您有责任设计和实施单元测试以确保您的JobDispatcher类按此处指定的方式工作。(这是行业的惯例。)共享任何测试代码都将被视为剽窃。测试的源代码应该在Tests.java中提供。您可以使用JavaSE1.8中的任何类进行测试。4.4.4项目名称、文件名和接口?您必须从https://gitlab的F29OC-2019-20-CW2-Coursework项目中fork您的项目student.macs.hw...进入您自己的私人GitLab空间(https://gitlab-student.macs.h...
